给出以下标记:
<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我想确保从每个输入捕获的值是发送到服务器的实际值。
答案 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);
}
答案 4 :(得分:0)
受@ Deleteman的想法启发,这是一种稍微简单的方法:
var getCheckBoxValue = function() {
var input = $('[name="active"]');
return $(input[1].checked ? input[1] : input[0]).val();
}
这假设只有两个具有此名称的字段,这是您正在尝试做的一个明智的假设。
它还假设隐藏字段始终位于复选框之前,这也是,因为我认为,对于Rails,这是一个明智的假设:)