jQuery .data()不返回布尔值;为什么呢?

时间:2017-01-02 14:51:23

标签: jquery

我非常缺乏经验的jQuery程序员无法在我的琐碎脚本中找到错误。你能帮忙吗?

如果其状态与初始值不同,我想强调一个复选框。该初始值存储为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有:&#34; jQuery .data()方法很聪明地识别布尔值和数值并将它们转换为原生类型&#34 ;.这就是我想要的。

我的脚本以:

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

但是$init的值是undefined(对于最初未经检查的输入)或空字符串(对于最初检查过)。他们两个都评价为假。为什么我没有得到真/假呢?

2 个答案:

答案 0 :(得分:3)

jQuery不会将数据属性视为布尔属性(如checked,readonly等),因此您必须为其赋值

<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]");

答案 1 :(得分:0)

你可以检查元素是否具有如下属性:

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