1

jQuery を使用して、テーブルの変更イベントをキャプチャしています。テーブルには多くの行があり、各行にはいくつかの入力ボックスとチェックボックスがあります。これを行うために、イベント委任を使用しています。tbody レベルで変更をキャプチャしています。これは以下のコードです

$j('#orderItems tbody').change(function (event) {
    var target = $j(event.target);
    var nodeName = $j(target).attr('nodeName').toLowerCase();
    if (nodeName == 'input') {
        if ($j(target).hasClass('partnum')) {
            var val = $j(target).attr('value');
            dsOrder.getItem(target);
            dsOrder.updateActiveIndex(target);
        }
        if ($j(target).hasClass('qty')) {
            var val = $j(target).attr('value');
            dsOrder.updateQty(target);
            dsOrder.updateActiveIndex(target);
        }
        if ($j(target).hasClass('unitprice')) {
            var val = $j(target).attr('value');
            dsOrder.updatePrice(target);
            dsOrder.updateActiveIndex(target);
        }
    }
})

このコードは Firefox では問題なく動作しますが、IE では変更イベントがキャプチャされません。各入力要素に各イベントをアタッチするのではなく、イベント委任を使用してこのソリューションにアプローチしたいと思います。また、テーブルの行が動的に構築され、バインド解除/バインド イベントが少し面倒に見えるため、jQuery を使用して各要素をターゲットにすることも避けたいと思います (私の意見です)。

これを機能させる方法についてのアイデアはありますか?

4

1 に答える 1

1

実際には、バブリングを使用して祖先要素のイベントを取得しています (IE はサポートしておらず、jQuery は使用していません)。残念ながら、DOM 仕様ではonchange 泡が発生しますが、IE では発生しません

入力をターゲットにするだけでよいと思います。(残念ながら、'live' 関数も onchange をサポートしていません。)

于 2009-04-15T12:19:45.210 に答える