я пытаюсь добавить тег p с некоторым текстом, и я пытаюсь показать предупреждающее сообщение при наведении курсора на содержимое тега p, но здесь это не работает, вот мой код: код
моя функция наведения в jquery не работает
Ответы (4)
Вот: http://jsfiddle.net/Skooljester/37TUN/3/ Вместо click
и hover
я использовал функцию live
.
Вот код:
$('#addmore').live("click", function(){
$('<p id="text3">text3</p>').appendTo('#paragraph_div');
});
$('#text3').live("mouseover", function(){
alert('its done!');
});
live
есть некоторые серьезные недостатки и что он объявлен устаревшим. . Если возможно, я бы привязывал событие постфактум по мере необходимости, а когда это невозможно, использовал бы delegate
или on
.
- person David Brainer; 12.12.2011
Вы вызываете hover()
для элемента, которого еще нет в DOM. Чтобы обойти это, используйте on()
:
$('#paragraph_div').on('mouseover','#text3',function(e){
if ($(e.target).is('#text3')){
alert("It's done!");
}
});
Как отмечено в комментариях Alnitak, on()
доступен только с версией jQuery 1.7 и выше. Чтобы использовать версию jQuery до версии 1.7, вы можете использовать delegate()
для того же эффекта:
$('#paragraph_div').delegate('#text3','mouseover',function(e){
if ($(e.target).is('#text3')){
alert("It's done!");
}
});
демонстрация JS Fiddle с использованием jQuery 1.4.4 (просто для демонстрации другой версии).
.live()
- person Alnitak; 12.12.2011
delegate()
является предпочтительным вариантом (согласно примечаниям к live()
).
- person David says reinstate Monica; 12.12.2011
Вам просто нужно немного изменить свой код. Вот что я изменил:
$('#addmore').click(function() {
$('#paragraph_div').append("<p id='text3'>text3</p>");
$('#text3').hover(function() {
alert('its done!');
});
});
Вы пытались связать событие hover
до того, как создали div для его привязки. Я переместил его внутрь события click
, где вы фактически создавали div text3
. Вы должны всегда помнить о привязке событий после создания новых элементов dom.
Обратите внимание, что, как упоминалось в некоторых других ответах, вы можете использовать live
(устаревшее), delegate
или on
(1.7+). Однако я склонен ошибаться, добавляя события к элементам после создания, когда это целесообразно.
Кроме того, вызов оповещения во время события hover
может не иметь смысла в зависимости от ваших намерений. Возможно, вы захотите использовать hover
для отображения div или выполнения другого действия. Если вы хотите всплывающее предупреждение, лучше использовать mouseover
. Дополнительные сведения см. в разделе JavaScript/jQuery: событие запущено дважды.
$('#addmore').click(function() {
$('#paragraph_div').append("<p id='text3'>text3</p>");
$('#text3').mouseover(function() {
alert('its done!');
});
});
text3
? Вы определенно не должны добавлять несколько элементов с одним и тем же идентификатором.
- person David Brainer; 12.12.2011
1-е, пожалуйста, удалите document
кавычки. Во-вторых, измените hover
, чтобы он жил с событиями mouseenter
и mouseleave
, потому что hover
неявно вызывает события mouseenter
и mouseleave
. проверьте скрипку http://jsfiddle.net/37TUN/10/
$(document).ready(function () {
$('#addmore').click(function(){
$('#paragraph_div').append("<p id='text3'>text3</p>");
});
$('#text3').live('mouseenter mouseleave',function(){
alert('its done!');
});
});
class
вместоid
.id
должен быть уникальным во всем документе. - person Emil Lundberg   schedule 12.12.2011