如果是复选框,则捕获正确输入的值

时间:2012-10-02 18:00:48

标签: javascript jquery html

给出以下标记:

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

取消选中该复选框并提交表单后,服务器将为“active”参数获取值“0”。选中复选框并提交表单后,服务器将为“活动”参数获取值“1”。这很好用。

我想要做的是在此基础上捕获JavaScript中的正确值。然而,诀窍是我不知道输入是否是复选框。就我的脚本而言,它只是在一组输入上进行操作。

我在这里创建了一个JSFiddle:http://jsfiddle.net/bcardarella/5QRjF/来证明这个问题。

TL; DR我想确保从每个输入捕获的值是发送到服务器的实际值。

5 个答案:

答案 0 :(得分: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/

希望它有所帮助!

答案 1 :(得分:0)

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

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

     var isChecked = this.checked;
     var val = 0;
     if(isChecked){
         val = 1
     }
});

答案 2 :(得分:0)

尝试类似

的内容
$("form#formID :input").each(function(){
   if ($(this).attr() == 'checkbox') return $(this).checked();
   else return $(this).val();
});

答案 3 :(得分: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/

答案 4 :(得分:0)

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

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

这假设只有两个具有此名称的字段,这是您正在尝试做的一个明智的假设。

它还假设隐藏字段始终位于复选框之前,这也是,因为我认为,对于Rails,这是一个明智的假设:)