簡體   English   中英

jQuery返回復選框為全部選中狀態,即使只有一個選中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM