2011-08-13 54 views
1

我不知道如果我剛發現一個潛在的jQuery錯誤,但請查看以下情況。動態鏈接屬性時jQuery數據()的潛在錯誤?

如果我動態更改data-ajax-link屬性,然後嘗試使用$('something').data('ajax-link');獲取它的值,則在動態更改之前,檢索的值仍舊是舊值。

這裏是例子。這是一個自定義dropDown,它將ul的第一個孩子的點擊選項。該元素的名稱,以及第一胎的數據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) 

}); 

在我的例子,你可以看到,選擇不同的選項後,下拉菜單,然後點擊測試鏈接,data-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/