2014-01-30 35 views
2

按本JSFIDDLE甚至檢查 -jQuery的返回複選框所有,如果只有一個被選中

我一直在瘋狂試圖弄清楚這一點對於最後48小時。除複選框之外的所有內容均有效。我包含了導致此問題的代碼片段。

我創建箱(按複選框按鈕)後並完成形式,我在看到code是成功的,是能夠序列化複選框爲JSON - 但是,我最終得到了所有複選框在「上」,即使只有一個他們被檢查。

當我檢查只有一個(第一盒)等未選中複選框,並單擊「保存」,我得到這個結果爲:

{"ck1":"on","ck2":"on","ck3":"on","submit1":"save"}

那是什麼拋出的結果了嗎?我在這段代碼中做錯了什麼?

在確定問題時將會受到幫助。
我的目標是看到這種格式的JSON時,我有第一個複選框選中:

{"ck1":"on","submit1":"save"}或任何格式,你會建議。

編輯:

找到我assinged提交事件了以下功能:

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

+0

即使您提供小提琴,您應該在問題本身**中發佈相關代碼**。只有鏈接的問題和答案不遵循網站指南,因爲如果鏈接中斷,就變得毫無用處。 –

+0

你想要這個:http://jsfiddle.net/aamir/AJwXV/3/? –

+0

您的複選框缺少一個ID。 –

回答

1

您正在從複選框中獲取值,並且無論複選框的狀態如何,值都始終相同。

檢查元素的類型來獲取狀態複選框:

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; }); 
+0

爲什麼要做:檢查兩次。他也沒有複選框上的ID。 .attr('name')應該可以工作。 –

+0

@AamirAfridi:你在哪裏看到':checked'檢查兩次?如果再看一遍,你會發現複選框上實際上有一個id,但沒有名稱,所以'attr(「id」)'工作,'attr(「name」)'不。 – Guffa

+0

這是所問問題的正確答案。 – Mordred

0

你正在任意分配所有輸入的值,你實際上沒有檢查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(); 
} 

您還需要單選按鈕例外。

+0

無線電部分適合我,並沒有問題。看到這個小提琴:http://jsfiddle.net/farondomenic/JF3Qv/ – Faron

+0

沒有它實際上,它有完全相同的問題。如果你沒有檢查任何單選按鈕,它們將顯示它們的值。如果您創建了一個組,該值將成爲最後一個單選按鈕,即使未選中該按鈕。 – Halcyon

相關問題