您的问题 = 点击传播
在浏览器中,事件沿DOM元素树传播。为了让每次调用单独执行,您需要停止这种传播。您的代码还会内联设置点击处理程序,因此我建议将功能与标记分开。
使用jQuery
不要内联设置点击处理程序,而是使用jQuery:
$(".milestonehead img").click(function(evt) {
evt.preventDefault();
deletefun("35");
});
对于您的H4
也是同样的处理方式。请注意,我的jQuery选择器可能不适用于您的情况,但您始终可以通过ID或CSS类来区分特定元素。
关注点分离
将功能性代码外部化为单独的文件(或至少在页面中作为代码块)可使您的页面更易于维护。
在DOM Ready事件中设置事件处理程序:
$(function(){
$(".milestonehead").click(function(evt) {
evt.preventDefault();
editfun("35");
});
$(".milestonehead img").click(function(evt) {
evt.preventDefault();
deletefun("35");
});
});
改善标记
看起来您有一些项目列表(因为您正在处理与项目 35 相关的内容),其中每个项目都由 h4
和嵌套的删除图标表示。因此,我建议更改标记(和代码)以执行以下操作:
<h4 class="milestonhead" data-edit-item="35">
Some header
<img src="/images/delete.gif" data-delete-item="35" />
</h4>
请使用CSS文件来为您的元素进行样式设置(再次分离关注点,无论是在单独的CSS文件中还是在您的页面上的
style
块中),这样您以后就可以感谢我了。
.milestonehead {
cursor: pointer;
}
.milestonehead img {
float: right;
}
处理这些项目的代码将如下所示:
$(function() {
$("[data-edit-item]").click(function(evt){
evt.preventDefault();
editfun($(this).data("editItem"));
});
$("[data-delete-item]").click(function(evt){
evt.preventDefault();
deletefun($(this).data("deleteItem"));
});
});
这会为具有适当数据属性(
data-edit-item
或
data-delete-item
)的任何元素创建两个常见的点击处理程序。因此,您的标题也可能具有这些以及一些“编辑”链接。只需将适当的值设置为该特定数据属性即可。
on
替代了live
。这是处理事件委托的最佳方式。 - Andy$('.image').click(function ()...
不起作用。 - Andy