[英]jQuery returns checkboxes as all checked even if only one is checked
按照這個JSFIDDLE-
在過去的48小時里,我一直在瘋狂地試圖解決這個問題。 除復選框外,一切正常。 我在其中包含了導致問題的孤立代碼段。
創建框(按復選框按鈕)並完成表單后,我成功地看到了code
並且能夠將復選框序列化為JSON
但是,即使只選中了其中一個復選框,我最終還是打開了所有復選框。
當我僅選中一個(第一個框)而未選中其他框,然后單擊“保存”時,我得到以下結果:
{"ck1":"on","ck2":"on","ck3":"on","submit1":"save"}
是什么使結果無效? 我在這段代碼中做錯了嗎?
在確定問題時將提供幫助。
我的目標是在選中第一個復選框時以這種格式查看JSON:
{"ck1":"on","submit1":"save"}
或您建議的任何格式。
編輯:
在我希望提交的活動下面找到功能:
$('#form'+formnum).submit( function(e) {
e.preventDefault(e);
var data = {};
//Gathering the Data
$.each(this.elements, function(i, v){
var input = $(v);
data[input.attr("id")] = input.val();
//delete data[button.attr("id")]; <-- cant' figure it out
//removeData[submit] <-- cant' figure it out
}); // end of $.each
var output =JSON.stringify(data);
$('#showurl').text(output);
}); //end of 'save' button function
JSFIDDLE: jsfiddle 。
您是從復選框中獲取值的,並且無論復選框的狀態如何,該值始終相同。
檢查元素的類型以獲取復選框的狀態:
if (input.is(':checkbox')) {
if (input.is(':checked')) {
data[input.attr("id")] = input.val();
}
} else {
data[input.attr("id")] = input.val();
}
如果只需要復選框中的數據,則可以從開始就過濾掉選中的復選框:
$(':checked', this).each(function(i, v){ data[v.id] = v.value; });
您是在任意分配所有輸入的值,實際上並不是在checked
狀態。
為以下項添加條件行:
data[input.attr("id")] = input.val();
就像是:
if (/* (input is a checkbox and checkbox is checked) or input is not a checkbox*/) {
data[input.attr("id")] = input.val();
}
您還需要單選按鈕的例外。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.