3

2 つの列を含むテーブルがあります。

最初の列に親の名前、2 番目の子の名前が含まれているとします。デフォルトでは、最初の親要素が選択されます。最初の要素を除くすべての親の子を隠しています。

アコーディオンのように動作するコードは次のとおりです(一度に1つだけが表示されます):

$(document).ready(function()  {
    var childs = $('.tableCellWBorderGray > div'); // child divs
    childs.hide();

    $("input:radio[name=attribute]").change(function(){
              var parent = $(this).parent().next(); // In our case, second td
              var kids = parent.children();
              childs.slideUp('slow');
              kids.slideDown('slow');
        });
     // select first element and trigger change event to show childs.  
    $('input:radio[name=attribute]:nth(0)').attr('checked',true).trigger('change');
});

これは、他のすべてのブラウザーで正常に機能します。

しかし、IEDocument Mode: IE7 Standardsでは、最初にチェックされた要素をクリックすると、changeが発生します。チェックされた要素をクリックすると、これは一度だけ発生します。防ぎたい。

val() を使用して選択の値を設定すると、jquery 変更イベントがトリガーされ ないのはなぜですか?

受け入れられた答えは、

変更イベントには、JavaScript コードではなく、ユーザーが開始した実際のブラウザー イベントが必要です。

回避策はありますか?

完全な例: http://jsfiddle.net/CZZeR/2/

4

1 に答える 1

1

変更イベントを発生させるにはattr関数をオーバーライドする必要があります

コード:

$(function() {
    var $attrFn = $.fn.attr;
    $.fn.extend({
        attr: function() {
            var attrCatch = $attrFn.apply(this, arguments);
            if (arguments.length) {
                $(this).change();
            }
            return attrCatch;
        }
    });
});

働くフィドル

于 2013-06-07T09:12:28.320 に答える