2011-02-12 4 views
0

Так что я добавляю некоторые элементы с jQuery, которые содержат href, который вызывает другой скрипт при щелчке якоря, но не работает; вот пример:jQuery Добавленные элементы с href и javascript не работают

$(".un_comentario").hover(

    function() { 

     $("#dedos_voto", this).append($("<span id=\"commentup\" class=\"vote_up\"><a href=\"javascript:;\" ><img src=\"/mimg/comment/csthumbup.png\" /></a><?php echo $utilchido;?></span>")); 

    } 

); 

Так как вы можете увидеть якорь имеет HREF, который вызывает другой сценарий, вот другой сценарий:

$(function(){ 

    $("span.vote_up").click(function(){ 
    //get the id 
    the_id = $("div.un_comentario").attr('id'); 

     $.ajax({ 
      type: "POST", 
      data: "action=vote_up&id="+$("div.un_comentario").attr("id"), 
      url: "votacomment.php", 
      success: function(){alert("Gracias, el voto se ha agregado."); 
       } 

     }); 


     }); 
}); 

Так что скрипт работает только тогда, когда элементы находятся в HTML разметка, но не если элементы добавлены с помощью jQuery.

Любое предложение?

ответ

2

вы динамически добавлять HREF ссылки на DOM использовать .live()

$("span.vote_up").live('click',function(){ 

//rest of your logic 

}); 
0

Вы можете использовать $("span.vote_up").live() вместо $("span.vote_up").click. Это свяжет код со всеми элементами span.vote_up, которые позже могут быть добавлены в DOM.

Я нашел this ссылку полезной

+0

Хорошо, что теперь исполняет скрипт (показывая, что он изменил его работу), но теперь он не делает то, что он должен сделай, я собираюсь проверить, что я что-то пропустил. – Danny

1

Два выше правильные ответы, но я также рекомендую не использовать href=\"javascript:;\" в якорь, вместо того, чтобы добавить return false; в конце функции JQuery.

Я использую этот сайт для лучших практик с JavaScript http://www.javascripttoolbox.com/bestpractices/#onclick (я перенаправит вас в части о якорей, но вся страница стоит читать)

+0

Спасибо, я использую onclick вместо этого. – Danny

1

.live() давно уже устарел (удален в версии 1.9), мы можем перестаньте рекомендовать? Правильный подход заключается в использовании .on(), как это:

$("#span.vote_up").on("click", function(event){ 
    //do this 
}); 

jQuery documentation for .on()

Кроме того, ни return false; или внушение href=\"javascript:;\" обязательно хорошие ответы ... Если у вас нет соответствующего HREF к замените (затем используйте event.preventDefault(), чтобы предотвратить поведение по умолчанию), просто используйте более подходящий элемент ...

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