2017-01-02 62 views
1

我很無經驗的jQuery程序員無法在我的平凡腳本中發現錯誤。能否請你幫忙?jQuery .data()不返回布爾值;爲什麼?

我想強調一個複選框,如果它的狀態不同於初始值。該初始值存儲爲data-init屬性。爲檢查和未經檢驗的輸入生成的HTML看起來像這樣:

<td><input checked data-init id="controls-0-modeU" name="controls-0-modeU" type="checkbox" value="y"></td> 

<td><input id="controls-1-modeU" name="controls-1-modeU" type="checkbox" value="y"></td> 

在這裏接受的答案:Retrieve boolean data from data attribute in jquery有:「jQuery的.data()方法是聰明承認布爾和數值,並將其轉換成他們的母語式「。這就是我想要的。

我的腳本開始:

$(document).ready(function(){ 
     $("td input:checkbox").change(function(){ 
      var $init = $(this).data("init") 

$initundefined(對於最初選中輸入)一方或一個空字符串(最初選中)。他們都評價爲假。爲什麼我沒有變爲真/假?

+2

的在複選框中沒有'data-init'屬性... –

+0

並且有多個複選框,並且代碼不完整。 – Riddler

+0

你的'data-init'沒有任何價值。只有'checked'複選框的空屬性?你想實現什麼? –

回答

3

數據屬性不被jQuery的像對待布爾屬性(如檢查,只讀,等等),所以你必須給它一個值

<td><input checked data-init="true" id="controls-0-modeU" name="controls-0-modeU" type="checkbox" value="y"></td> 

<td><input data-init="false" id="controls-1-modeU" name="controls-1-modeU" type="checkbox" value="y"></td> 

,如果你想保持你的標記,你必須做繁重的自己

var $init = $(this).is("[data-init]"); 
0

您可以檢查,如果該元素具有像這樣的屬性:

if (!!$(this).attr("data-init")) { 
    // its there 
} 
else { 
    // its not 
} 
+0

'!!'但是爲什麼?儘管如此,他的屬性實際上是空的,並且不包含布爾值 – empiric

+0

,因爲缺少的屬性可以返回「undefined」或「false」,這樣您就可以將兩者都捕獲爲「falsy」值 –

+0

我不確定if這就是OP想要的,特別是考慮到鏈接的答案。他並沒有要求檢查他所得到的價值,而是爲什麼他沒有得到預期的價值 – empiric