2012-04-06 3 views
-1

Я пытаюсь использовать jQuery.one для элемента, загруженного ajax. Он работает, если элемент уже загружен, но не когда элемент загружается с помощью ajax.JQuery.one не работает с элементом, загруженным ajax

Вот что я пытаюсь сделать.


$("#selector").one('mouseenter', selMouseEnter); 

function selMouseEnter() { 
Some code.... 
} 

Thx заранее. Шаши

EDIT:

$(".pitem").on('mouseenter', selMouseEnter); 

$(".pitem").mouseleave(function(){ 
    jQuery(this).find(".tooltip").remove(); 
    $(".pitem").on('mouseenter', selMouseEnter); 
}); 

function selMouseEnter() { 
    jQuery(this).find(".tooltip").remove(); 
     var id = $(this).attr('id').replace('myprize', ''); 
    var myObj = jQuery('#Py').data('myprize' + id); 
    if(myObj) { 
     Some code that is opening tooltip having buttons.... 
    } 
} 

Теперь конфликт, когда я снова и не нажимать на кнопку в подсказке его вызывающему событие MouseEnter один конкретный к кнопке.

Примечание: #PY приходит с использованием Ajax

ответ

0

Поскольку элемент динамически загружен, вам необходимо использовать .live() или .on() или livequery(). См. Ссылки для получения дополнительной информации. Используйте соответствующий метод в зависимости от вашей версии jQuery

1

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

В JQuery 1.7+, вы можете использовать делегированные версию .one(), как это и было бы ответить на первый MouseEnter на #selector объекта всякий раз, когда он добавляется к странице:

$(document).one('mouseenter', "#selector", selMouseEnter); 

В идеале, вы бы замените document статическим родительским объектом #selector, который существует во время запуска этого кода, поскольку это будет более эффективно, чем использование объекта document, хотя document будет работать.

+0

Пробовал, но противоречил моему другому коду. – Shashi

+1

Вам нужно будет показать нам свой HTML-код и какой код он противоречит, чтобы мы знали, что предложить. Это как вы относитесь к динамически добавленным элементам (используя делегированную обработку событий). Или вам нужно установить только обработчик событий ПОСЛЕ того, как элемент добавлен на страницу. Выберите один из этих двух вариантов. – jfriend00

+0

jfriend00 имеет это точно ... «Пробовал, но это противоречиво» недостаточно. Единственный ответ на это: «Ну ... тогда исправьте конфликт». –

0

Чтобы правильно работать с событиями jquery на динамически загружаемых элементах, вам необходимо будет присоединить события таким образом.

$("#parent").on({ 
    mouseenter: function (e) { 
    // perform mouse enter event 
    }, 
    mouseleave: function (e) { 
    // perform mouse leave event 
} 
}, '#selector'); 

Где #Parent представляет собой элемент id, где элементы загружаются динамически.

+0

Пробовал, но противоречил моему другому коду. – Shashi

+0

, где он конфликтует, вам необходимо выполнить этот код в функции, ответственной за создание динамических элементов. – irfanmcsd

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