2014-04-25 25 views
0

我在做什么是这样的:如何通过onclick函数传递不同的变量?

$(document).on("click", "#deleteMe", function(){ 

    var id = $(this).data("id"); 
    console.log(id); 

    // function to delete event by id goes here 
}); 

我删除HTML看起来像这样:

<div id="deleteMe" data-id="">Delete</div> 

值的数据-ID是通过不同的函数给出这样一旦页面有许多事件,上面的data-id字段在模态加载时有90,91,92等数字。因此,例如:

<div id="deleteMe" data-id="90">Delete</div> 
<div id="deleteMe" data-id="91">Delete</div> 
<div id="deleteMe" data-id="92">Delete</div> 

第一次点击'删除'时,这个功能完全正常 - 事件从数据库中删除就像我想要的那样。不幸的是,每次我点击一个不同的事件并再次点击'删除'时,删除失败,并且console.log显示它正试图删除我删除的FIRST元素的前一个ID。

这就像我第一次使用onclick函数,它绑定了我使用的原始ID,并且每次点击从此开始保持相同的ID而不是传递新的数据ID。我如何解决这个问题?

Ex。

只要点击事件90,点击删除。活动已成功删除! (Console.log =“试图删除ID#90”) 只需点击事件91,点击删除。什么都没发生。 (Console.log =“试图删除ID#90”

在点击删除之前检查元素时,正确的数据ID在那里 - 只是点击“删除”它不抓取新数据我想要删除的下一个事件中的-id值

+4

可能有一些与他们都具有相同的ID。使用班级来识别常见元素 - '

Delete
' – BadFeelingAboutThis

+0

只是尝试将其更改为班级,没有任何区别 - 尽管我确实记得有人告诉我说ids在页面上应该是唯一的,所以我会这样做从现在开始。不幸的是,它不能解决问题,但! – cg22

+0

你是否改变了选择器? '$(document).on(“click”,“.deleteMe”,function(){' – BadFeelingAboutThis

回答

1

对于初学者来说,如果你打算将多个元素标记为deleteMe,你应该使用一个类而不是id,ID应该是唯一的。你有data-id应该是ID的

假设你改变了要素:

<div class="deleteMe" data-id="90">Delete</div> 

要删除被点击,你可以做到这一点的元素:

$('.deleteMe').click(function() { 
    console.log('Deleting ID:', $(this).attr('data-id')); 
    $(this).remove(); 
}); 

- 编辑 -

由于人提到,我错过了事件代理点,你可以这样做确保与deleteMe类创建的所有未来的元素也响应click事件:

$(document).on('click', '.deleteMe', function() { 
    console.log('Deleting ID:', $(this).attr('data-id')); 
    $(this).remove(); 
}); 
+1

你开始如此出色,但错过了事件委派的要点... –

+0

他们为什么要删除文件中的所有点击?.click()和文档。 – BadFeelingAboutThis

+0

我只是不确定他要做什么,因为他的例子使用'$(document).on('click'等)' – jshanley

0

我只是改变这个功能解决了这个:

var id = $(this).data("id"); 

到:

var id = $(this).attr("data-id"); 

我不认为有一个区别,但双重和三重检查它证实了这两个功能不同的操作。

找到有关DOM这里就可以了一些有趣的信息:http://www.peterbe.com/plog/data-and-attr-in-jquery

+0

这正是我建议的;)谢谢你的链接,虽然,很好的信息。 – jshanley

+0

哦,我没有看到您的编辑!我现在看到了 - 谢谢! – cg22

相关问题