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

写下复选框的点击事件..

$('#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 回答
0

受@Deleteman 想法的启发,这是一种稍微简单的方法:

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

这假设只有两个具有此名称的字段,这是对您尝试做的事情的合理假设。

它还假设隐藏字段总是出现在复选框之前,这也是,因为我认为,对于 Rails,这是一个理智的假设:)

于 2012-10-02T21:02:45.147 回答