2

次のマークアップがあるとします。

<input name="active" type="hidden" value="0" />
<input id="active" name="active" type="checkbox" value="1" />

チェックボックスをオフにしてフォームを送信すると、サーバーは「アクティブ」パラメータの値「0」を取得します。チェックボックスがチェックされ、フォームが送信されると、サーバーは「アクティブ」パラメータの値「1」を取得します。これはうまくいきます。

私がやりたいのは、それに基づいて JavaScript で適切な値をキャプチャすることです。ただし、入力がチェックボックスかどうかはわかりません。私のスクリプトに関する限り、一連の入力に作用しているだけです。

ここに JSFiddle を作成しました: http://jsfiddle.net/bcardarella/5QRjF/は、問題を示しています。

TL;DR 各入力からキャプチャした値が、サーバーに送信される実際の値であることを確認したいと思います。

4

5 に答える 5

2

チェックボックスを実際にチェックするかどうかはわかりませんが、次のコードは機能します。

$(function() {
    var getCheckBoxValue = function() {
        if ($('[name="active"]:checkbox').attr("checked")) {
            return $('[name="active"]:checkbox').val();
        } else {
            return $('[name="active"]').val();
            }
    }
    var result = $('#result');

    result.append($('<p/>', {text: 'Expected value 0, got: ' + getCheckBoxValue()}));

    $(':checkbox')[0].checked = true;

    result.append($('<p/>', {text: 'Expected value 1, got: ' + getCheckBoxValue()}));
});

基本的に、チェックボックスがチェックされている場合はそれを使用し、それ以外の場合は隠し入力のデフォルト値を使用します。

編集

私のコメントをフィドルに変えて、その背後にあるアイデアをよりよく示すために、別のフィールド、テキストフィールドも追加しました: http://jsfiddle.net/45qup/

それが役に立てば幸い!

于 2012-10-02T18:10:59.957 に答える
0

@Deleteman のアイデアに触発されて、これは少し簡単な方法です。

var getCheckBoxValue = function() {
    var input = $('[name="active"]');
    return $(input[1].checked ? input[1] : input[0]).val();
}

これは、この名前のフィールドが 2 つしかないことを前提としています。

また、非表示フィールドが常にチェックボックスの前にあると想定しています。

于 2012-10-02T21:02:45.147 に答える
0

チェックボックスのクリックイベントを書きます..

$('#active').on('click', function(){

     var isChecked = this.checked;
     var val = 0;
     if(isChecked){
         val = 1
     }
});
于 2012-10-02T18:07:17.853 に答える
0

次のようなものを試してください

$("form#formID :input").each(function(){
   if ($(this).attr() == 'checkbox') return $(this).checked();
   else return $(this).val();
});
于 2012-10-02T18:08:48.490 に答える
0

これを使用するかどうかはわかりません ;) が、動作します:

var getCheckBoxValue = function() {
    var values = $('[name="active"]')
        .filter(':checked, :hidden')
        .map(function(){ 
            return parseInt($(this).val(), 10); 
        }
    );

    return Math.max.apply(Math, values);
}

http://jsfiddle.net/Xc5H7/1/

于 2012-10-02T18:54:09.680 に答える