0

私が開発している Web サイト用のカスタム計算機を構築しようとしています。私は新しい開発者で、これは少し頭を悩ませていますが、学ぼうとしています。

2 つの変数を取得して 1 つに結合し、それを使用して ajax を介して別のページから div を呼び出そうとしています。私が抱えている問題は、コードを追加して2つの変数を結合すると、ページが壊れてしまい、その理由がわからないことです。

     $(function(){
        $("input:radio[name=f_1]").click(function() {
          var type = $(this).val();
        });
        $("input:radio[name=f_1a]").click(function() {
          var prod = $(this).val();
        });

        var JobType = type + prod;
    });

ここでライブを見ることができます: http://rdmproductions.com/dev/

JobType 変数の行を取得すると、ページは本来の動作をします。何が起こっているのか、それを修正する方法がわかりません。

4

4 に答える 4

2

変数typeprodはローカル変数であるため、クリックハンドラコールバック関数の外部では使用できません。

それらをクリックハンドラーの外部で使用できるようにする場合は、それらをより高いレベルのスコープで宣言するか、クリックハンドラー関数の有効期間を超えて永続する他のオブジェクトに保存する必要があります。

おそらくあなたがしたいのは、typeとprodの値を、それらを保持しようとするのではなく、必要なときにフェッチすることですJobType

次のように、要求に応じてデータをフェッチできます。

var JobType = $("input:radio[name=f_1]").val() + $("input:radio[name=f_1a]").val();

2つのラジオボタンのクリックハンドラーもまったく必要ありません。


最新のコメントに基づいて編集します。

両方の無線グループへの変更をリッスンし、両方が選択されたことを確認してから、次のようなコードを使用して、結合された値で何かを実行できます。

$("input:radio[name=f_1], input:radio[name=f_1a]").change(function() {
    var f1 = $("input:radio[name=f_1]:checked").val();
    var f1a = $("input:radio[name=f_1a]:checked").val();
    if (f1 && f1a) {
        // both radio buttons have been selected, do something here
        var jobType = f1 + f1a;
        // do something with jobType here
        alert(jobType);
    }
});

あなたはそれがここで働くのを見ることができます:http://jsfiddle.net/jfriend00/FJcTA/

于 2012-04-20T22:05:42.583 に答える
1

変数 type と prod は、それらの関連関数のスコープ内でのみ有効です。さらに、onclick イベントは、コントロールがクリックされたときにのみ発生します。これは、コードが実行された後のある時点になります。ページがレンダリングされるとコードが実行されるように見えるため、ユーザーはまだボタンをクリックする機会がありません。したがって、ユーザーがフォームを完了する機会があった後、論理的な時間に計算を実行する必要があります。明らかな候補は、ページの送信時、またはユーザーがボタンをクリックするなどの別のイベントを介して発生します。ラジオ ボタンから onclick イベントを使用する必要さえありません。次のように、ラジオからの値を連結するだけで済みます。

function onSubmit() {
    var type = $("input:radio[name=f_1]").val();
    var type = $("input:radio[name=f_1a]").val();
    var jobType = type + prod;
    // do something with jobType
}

お役に立てれば

于 2012-04-20T22:05:14.983 に答える
0

これを試して:

$(function() {

    $("input:radio[name^=f_1]").click(function () {

      var total = 0;           

       $("input:radio[name^=f_1]").each(function () {
           total += parseInt($(this).val());
       });

   });

});
于 2012-04-20T22:08:00.390 に答える
0
 $(function () {
    var type, prod, jobType;
    $("input:radio[name=f_1]").click(function() {
      type = $(this).val();
    });
    $("input:radio[name=f_1a]").click(function() {
      prod = $(this).val();
    });
    jobType = type + prod;
});
于 2012-04-20T22:08:25.190 に答える