2

当涉及到 Firefox 16.0.1 时,我最近在 jQuery 1.4.1 中遇到了一个非常奇怪且非常糟糕的错误。其他所有浏览器都很好。旧版本的 Firefox 很好,新版本的 jQuery 很好。

我有一个带有一些复选框的表格,看起来像这样:

<table class="EntityTable">
<tbody>
    <tr>
        <td>
            <input type="checkbox" class="IdCheckBox" id="Checkfor654100" name="Checkfor654100" itemId="654100" />
        </td>
    </tr>
    <tr>
        <td>
            <input type="checkbox" class="IdCheckBox" id="Checkfor654101" name="Checkfor654101" itemId="654101" />
        </td>
    </tr>
    <tr>
        <td>
            <input type="checkbox" class="IdCheckBox" id="Checkfor654102" name="Checkfor654102" itemId="654102" />
        </td>
    </tr>
    <tr>
        <td>
            <input type="checkbox" class="IdCheckBox" id="Checkfor654103" name="Checkfor654103" itemId="654103" />
        </td>
    </tr>
</tbody>
</table>

并在 javascript/jquery 中循环并收集所有 itemId

    var ids = new Array();

    $('input.IdCheckBox:checked').each(function(){
       var thisBox = $(this);
       ids.push(thisBox.attr('itemId'));

    });

在 Firefox 16.0.1 中,ids 由页面的 url 填充。/theId 喜欢:http ://blahblahblah.com/654101

我只需将其更改为:

ids.push(thisBox.attr('itemid'));

但是,我想知道为什么会发生这种情况,以及其他是否受此影响。

这是一个 JS Fiddle 展示了这个问题的全部荣耀:http: //jsfiddle.net/K8jRf/8/

谢谢!

4

2 回答 2

4

这似乎不是 jQuery 问题/错误,而是 FF16(和 FF17b)javascript 问题/错误。以下 html 片段显示了 itemId 在(至少)li 元素上的特殊行为:

<html><body><ul><li id="li1"></li></ul><script>
var element = document.getElementById("li1");
// assign to bla
element.bla = "hello";
// after
alert( element.bla ); // ok -> hello
// assign
element.itemId = "hello";
// after
alert( element.itemId ); // nok -> <file uri>hello
</script>
</body>
</html>

从 FF16 开始,“itemId”似乎已成为“特殊属性/行为”。typeof(element.itemId) 是“字符串”,甚至在分配之前... FF15 的行为符合预期。

于 2012-10-17T07:47:09.880 回答
2

Firefox 将属性名称“规范化”为全部小写。

如果您使用的是datainstread of using,attr您可以执行以下操作:

<input type="checkbox" class="IdCheckBox"
                id="Checkfor654101" name="Checkfor654101" data-itemId="654101" />

JS:

var itemId = $("input").data("itemId");
于 2012-10-15T14:16:05.043 回答