我的jsp页面上有一个html div,我已经放了一个锚标签,请找下面的代码,
<div class="expandable-panel-heading">
<h2>
<a id="ancherComplaint" href="#addComplaint"
onclick="markActiveLink(this);">ABC</a>
</h2>
</div>
js code
$('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
alert('123');
});
function markActiveLink(el) {
alert($(el).attr("id"));
}
在这里,当我点击 div 时,我收到123
消息的警告,这很好但是当我点击 ABC 我想要留言我想打电话markActiveLink
方法。
我的代码出了什么问题?请帮帮我。
答案 0 :(得分:18)
问题是点击主播仍然触发了<div>
中的点击。这叫做“event bubbling”。
事实上,有多种解决方案:
检入DIV点击事件处理程序是否实际目标元素是锚点 → jsFiddle
$('.expandable-panel-heading').click(function (evt) {
if (evt.target.tagName != "A") {
alert('123');
}
// Also possible if conditions:
// - evt.target.id != "ancherComplaint"
// - !$(evt.target).is("#ancherComplaint")
});
$("#ancherComplaint").click(function () {
alert($(this).attr("id"));
});
停止来自锚点击侦听器的事件传播 → jsFiddle
$("#ancherComplaint").click(function (evt) {
evt.stopPropagation();
alert($(this).attr("id"));
});
<小时/> 您可能已经注意到,我已从示例中删除了以下选择器部分:
:not(#ancherComplaint)
这是不必要的,因为没有类.expandable-panel-heading
的元素也有#ancherComplaint
作为其ID。
我假设您想要抑制锚点的事件。这不能以这种方式工作,因为两个选择器(你和我的)都选择完全相同的DIV。选择器在调用时对侦听器没有影响;它只设置监听器应该注册的元素列表。由于此列表在两个版本中都相同,因此没有区别。
答案 1 :(得分:2)
试试这个
$('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
alert('123');
});
$('#ancherComplaint').click(function (event) {
alert($(this).attr("id"));
event.stopPropagation()
})
答案 2 :(得分:2)
请尝试以下操作:
$('.expandable-panel-heading').click(function (e) {
if(e.target.nodeName == 'A'){
markActiveLink(e.target)
return;
}else{
alert('123');
}
});
function markActiveLink(el) {
alert($(el).attr("id"));
}
以下是工作演示:http://jsfiddle.net/JVrNc/4/
答案 3 :(得分:2)
用这个改变你的jQuery代码。它会提醒a的id。
$('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
markActiveLink();
alert('123');
});
function markActiveLink(el) {
var el = $('a').attr("id")
alert(el);
}
答案 4 :(得分:1)
如果你有jQuery,你需要阅读事件冒泡并确保删除内联事件处理
测试div上的点击并检查目标
$(".expandable-panel-heading").on("click",function (e) {
if (e.target.id =="ancherComplaint") { // or test the tag
e.preventDefault(); // or e.stopPropagation()
markActiveLink(e.target);
}
else alert('123');
});
function markActiveLink(el) {
alert(el.id);
}
答案 5 :(得分:1)
我会像这样使用stopPropagation
:
$('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
alert('123');
});
$('#ancherComplaint').on('click',function(e){
e.stopPropagation();
alert('hiiiiiiiiii');
});
答案 6 :(得分:0)
尝试此示例,仍然会从HTML调用onclick,并停止事件冒泡。
<div class="expandable-panel-heading">
<h2>
<a id="ancherComplaint" href="#addComplaint" onclick="markActiveLink(this);event.stopPropagation();">ABC</a>
</h2>
</div>
答案 7 :(得分:0)
将您的jquery函数放入调用点击事件的就绪函数中:
$(document).ready(function() {
$("#ancherComplaint").click(function () {
alert($(this).attr("id"));
});
});
答案 8 :(得分:0)
点击div alert键
$(document).delegate(".searchbtn", "click", function() {
var key=$.trim($('#txtkey').val());
alert(key);
});