Js附加按钮不起作用
Js appended button not working
在我的网站上,您可以将卡片添加到您的 collection。当您单击加号时,JS 会删除加号按钮并插入减号按钮。减号按钮现在可见但不起作用。我读过一些关于新附加按钮不可点击的文章,因为该按钮在首次加载页面时不存在。因此,当我重新加载页面时,减号也能正常工作。
这是我的代码:
HTML
echo '<li class="card addcards" id="card_' . $card["id"] . '">';
echo '<div class="status addtocol_btn addtocol_card_'.$card['id'].'" id="'.$card['id'].'"><span id="addtocol_'.$card['id'].'">'.$col_id.'</span>+</div>';
echo '</li>';
JS
// AJAX ADD CARD TO COLLECTION ON SEARCHPAGE
$(document).ready(function(){
$(".addtocol_btn").click(function(){
var card_id = $(this).attr('id');
var col_id = document.getElementById('addtocol_'+card_id).innerHTML;
$.ajax({
url: ""+homelink+"/addtocol.php",
method: "POST",
data:{'card_id':card_id, 'col_id':col_id},
success: function(result){
$('div[id="' + card_id + '"]').fadeOut();
$('#card_'+card_id+'').append('<div class="status del_btn del_btn_card_'+card_id+'" id="'+card_id+'"><span id="removefromcol_'+card_id+'">'+col_id+'</span>-</div>');
}});
});
});
// AJAX REMOVE CARD FROM COLLECTION ON SEARCHPAGE
$(document).ready(function(){
$(".del_btn").click(function(){
var card_id = $(this).attr('id');
var col_id = document.getElementById('removefromcol_'+card_id).innerHTML;
//if (confirm("Are you sure you want to remove this card from your collection?")) {
$.ajax({
url: ""+homelink+"/delete_card.php",
method: "POST",
data:{'card_id':card_id, 'col_id':col_id},
success: function(result){
$('div[id="' + card_id + '"]').fadeOut();
$('#card_'+card_id+'').append('<div class="status addtocol_btn addtocol_card_'+card_id+'" id="'+card_id+'"><span id="addtocol_'+card_id+'">'+col_id+'</span>+</div>');
}});
//}
});
});
我已经查看了 Jquery 手册:http://learn.jquery.com/events/event-delegation/ 并应用了那里显示的代码,但这只是破坏了我的整个 add/remove 代码:
// AJAX ADD CARD TO COLLECTION ON SEARCHPAGE
//$(document).ready(function(){
$(".card").on("click", "div", function( event ){
event.preventDefault();
var card_id = $(this).attr('id');
var col_id = document.getElementById('addtocol_'+card_id).innerHTML;
$.ajax({
url: ""+homelink+"/addtocol.php",
method: "POST",
data:{'card_id':card_id, 'col_id':col_id},
success: function(result){
$('div[id="' + card_id + '"]').fadeOut();
$('#card_'+card_id+'').append('<div class="status del_btn del_btn_card_'+card_id+'" id="'+card_id+'"><span id="removefromcol_'+card_id+'">'+col_id+'</span>-</div>');
}});
});
//});
谁能帮帮我?
提前致谢。
问题
您不能将事件处理程序绑定到不存在的元素(您在将 delete
按钮附加到 DOM 中时试图这样做)。
不过,随着 DOM 的变化,当元素被移除时,您的处理程序也可能会丢失。
解决方案
将您的处理程序绑定到 document
而不是特定的选择器和特定元素的过滤器。
换句话说,对您的处理程序使用此语法:
$(document).on("click", ".del_btn", function(){
虽然不是最好的方法,但有时 .live() (现已弃用)也可以解决问题。方法如下
$('.del_btn').live("click", function(){// your code here});
在我的网站上,您可以将卡片添加到您的 collection。当您单击加号时,JS 会删除加号按钮并插入减号按钮。减号按钮现在可见但不起作用。我读过一些关于新附加按钮不可点击的文章,因为该按钮在首次加载页面时不存在。因此,当我重新加载页面时,减号也能正常工作。
这是我的代码:
HTML
echo '<li class="card addcards" id="card_' . $card["id"] . '">';
echo '<div class="status addtocol_btn addtocol_card_'.$card['id'].'" id="'.$card['id'].'"><span id="addtocol_'.$card['id'].'">'.$col_id.'</span>+</div>';
echo '</li>';
JS
// AJAX ADD CARD TO COLLECTION ON SEARCHPAGE
$(document).ready(function(){
$(".addtocol_btn").click(function(){
var card_id = $(this).attr('id');
var col_id = document.getElementById('addtocol_'+card_id).innerHTML;
$.ajax({
url: ""+homelink+"/addtocol.php",
method: "POST",
data:{'card_id':card_id, 'col_id':col_id},
success: function(result){
$('div[id="' + card_id + '"]').fadeOut();
$('#card_'+card_id+'').append('<div class="status del_btn del_btn_card_'+card_id+'" id="'+card_id+'"><span id="removefromcol_'+card_id+'">'+col_id+'</span>-</div>');
}});
});
});
// AJAX REMOVE CARD FROM COLLECTION ON SEARCHPAGE
$(document).ready(function(){
$(".del_btn").click(function(){
var card_id = $(this).attr('id');
var col_id = document.getElementById('removefromcol_'+card_id).innerHTML;
//if (confirm("Are you sure you want to remove this card from your collection?")) {
$.ajax({
url: ""+homelink+"/delete_card.php",
method: "POST",
data:{'card_id':card_id, 'col_id':col_id},
success: function(result){
$('div[id="' + card_id + '"]').fadeOut();
$('#card_'+card_id+'').append('<div class="status addtocol_btn addtocol_card_'+card_id+'" id="'+card_id+'"><span id="addtocol_'+card_id+'">'+col_id+'</span>+</div>');
}});
//}
});
});
我已经查看了 Jquery 手册:http://learn.jquery.com/events/event-delegation/ 并应用了那里显示的代码,但这只是破坏了我的整个 add/remove 代码:
// AJAX ADD CARD TO COLLECTION ON SEARCHPAGE
//$(document).ready(function(){
$(".card").on("click", "div", function( event ){
event.preventDefault();
var card_id = $(this).attr('id');
var col_id = document.getElementById('addtocol_'+card_id).innerHTML;
$.ajax({
url: ""+homelink+"/addtocol.php",
method: "POST",
data:{'card_id':card_id, 'col_id':col_id},
success: function(result){
$('div[id="' + card_id + '"]').fadeOut();
$('#card_'+card_id+'').append('<div class="status del_btn del_btn_card_'+card_id+'" id="'+card_id+'"><span id="removefromcol_'+card_id+'">'+col_id+'</span>-</div>');
}});
});
//});
谁能帮帮我? 提前致谢。
问题
您不能将事件处理程序绑定到不存在的元素(您在将 delete
按钮附加到 DOM 中时试图这样做)。
不过,随着 DOM 的变化,当元素被移除时,您的处理程序也可能会丢失。
解决方案
将您的处理程序绑定到 document
而不是特定的选择器和特定元素的过滤器。
换句话说,对您的处理程序使用此语法:
$(document).on("click", ".del_btn", function(){
虽然不是最好的方法,但有时 .live() (现已弃用)也可以解决问题。方法如下
$('.del_btn').live("click", function(){// your code here});