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 like: 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 スニペットは、(少なくとも) li 要素での itemId の特別な動作を示しています。

<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は、属性名をすべて小文字に「正規化」します。

使用dataのインストレッドを使用していた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 に答える