2011-08-13 4 views
1

潜在的なjQueryバグを見つけたのかどうかはわかりませんが、次のケースをチェックしてください。動的に属性を変更したときのjQuery data()の潜在的なバグ?

data-ajax-link属性を動的に変更してから、値を$('something').data('ajax-link');で取得しようとすると、動的に変更する前の値は古いものです。

これは例です。これは、クリックされたオプションをulの最初の子に設定するカスタムdropDownです。要素の名前だけでなく、第一子のデータAJAXリンクをクリックしたオプションの値で更新されています...私の例ではhttp://jsfiddle.net/RLF3W/1/

$('.select .option').live('click', function (e) { 
    e.stopPropagation(); 
     $(".select .option:not('.darr')").hide(); 
     selectedOption = $(this).parents("div.select").find(".option:first"); 

     $(this).siblings().show(); 
     selectedOption.text($(this).text()).attr('data-ajax-link', $(this).data('ajax-link')); 
}); 

$('.select .option:not(".darr")').live('click', function() { 
    $(this).parents("div.select").find(".option:not('.darr')").hide(); 
}); 

$(window).click(function() { 
    $(".select .option:not('.darr')").hide(); 
}); 


$('a#tester').live('click', function(e) { 
    e.preventDefault(); 

    //var sort = $('#sortb .darr').attr('data-ajax-link'); 
    var sort = $('#sort .darr').data('ajax-link'); 

    $('#output').text(sort) 

}); 

あなたが別のオプションを選択した後にそれを見ることができますドロップダウンしてからテストリンクを押すと、要素が検査された場合に実際に変更されても、データajax-linkの値は元の値です。更新された値を取得するのに.attr('data-ajax-link')を使用した場合、正常に動作します。

私はここに間違っていますか、何か間違っているのですか、これはバグですか?

答えて

1

.attr()を使用して設定していますが、.data()を使用して設定しています。

私は.data()を経由して取得するとき、それは最初のプロパティが存在するかどうかを確認するためにjQuery.cacheにそのデータを見ていることかなりは確信しています。 そうでなければ、属性を探します。

data-属性で送信するだけですが、取得および設定するには.data()を使用してください。

selectedOption.text($(this).text()).attr('data-ajax-link', $(this).data('ajax-link')); 

これに:この

変更

// Use .data()----------------------v 
selectedOption.text($(this).text()).data('ajax-link', $(this).data('ajax-link')); 

例:http://jsfiddle.net/RLF3W/5/

関連する問題