2013-12-02 2 views
1

У меня есть некоторые элементы загрузки Ajax. После этого мне нужно прочитать data атрибут этих элементов на mouseenter. Но что-то не так, каждый из загруженных элементов не может отображать атрибут данных.Проверка длины атрибута данных после вызова Ajax

HTML:

<label data-href="/79" data-tooltip="description" class="tooltip">some label</label> 

и некоторые JS:

var tooltip = $('.tooltip'); 

tooltip.on({ 
    mouseenter: function(){ 
     if ($(this).data('tooltip').length){ 
      $('body').append('<span class="tooltip_vwr"/>'); 
     ... 

Как вызвать метод Длинна после АЯКС загрузки? Thx за помощью.

+0

какая версия JQuery вы используете? 'data-attributes' добавляются только к данным jQuery по [V1.6] (http://api.jquery.com/data/#data-html5) –

+0

' tooltip.on ('mouseenter', function() { ... ' – mdesdev

+0

У меня 1.9 версия jquery, @mdesdev, в чем разница? – Lukas

ответ

1

попробовать это:

$(document).on("mouseover", ".tooltip", function(e){ 
    //your code here 
    if ($(this).data('tooltip').length){ 
     $('body').append('<span class="tooltip_vwr"/>'); 
    } 
}) 

лучше, если вы свяжете это событие только тогда, когда данные, возвращаемые Аяксу вызова полностью загружен. (сейчас я не уверен, если это лучший способ ... попробуйте сначала один) как: функция

//EDIT - remember if this handler will trigger 2 or more time insert .off() before .on() 
var myhandler = function(){ 
    $(".tooltip").on(function(e){ 
     //your code here 
     if ($(this).data('tooltip').length){ 
     $('body').append('<span class="tooltip_vwr"/>'); 
     } 
    }) 
} 
$(function(){ 

    // call each time u need to rebind 
    myhandler(); 

    $.ajax({ 
    //ajax option 
    success : function(response){ 
     //at the end of your parsing and manipulating function you can bind event 
     myhandler(); 
    } 
    }); 
}) 

Если вы звоните Аякс 2 или больше времени добавления перед тем .on() в .off() например:

$(".tooltip").off().on(function... 

для предотвращения двойного связывания.

+0

да, но у меня есть это действие afetr и перед вызовом ajax для manny элементов на сайте, это подсказка, так что, может быть, лучше было бы создать для нее какую-то функцию и вызвать и уйти от успеха? – Lukas

+0

uhm ... вы можете попробовать сперва солью. Или вы можете попробовать и функции, которые содержат обработчик, и вызвать его в dom ready и на ajax загружен. подождите, я отредактировал свой ответ – Frogmouth

+0

ОК, сделано, и он работает, много thx. – Lukas

1

Попробуйте использовать event delegation, т. Е. Привяжите прослушиватель событий к охватывающему элементу, который, как гарантируется, будет существовать во время привязки. Например:

$(document).on('mouseenter', '.tooltip', function() { 
    //... 
}); 

Смотрите также:

Смежные вопросы