考虑以下,
<body>
<form id="form1" runat="server">
<div>
<input type="text" id="txt1" />
<input type="button" id="btn1" value="Submit"/>
</div>
</form>
<script>
$("#txt1").live("blur", function () {
console.log('blur');
return false;
});
$("#btn1").live("click", function () {
console.log('click');
return false;
});
</script>
</body>
上面的代码将记录模糊事件,并在相应事件的触发器上单击事件。 如果单击或更改文本框中的内容然后单击按钮btn1模糊和点击事件将分别发生。我想要的是如果模糊事件发生因为btn1然后点击事件不应该发生,它应该只记录模糊事件,我想要停止发生点击事件。 这该怎么做?有人可以帮忙吗?
答案 0 :(得分:0)
你不能“停止”这样的其他/外国事件。 Event.preventDefault()
和/或Event.stopPropagation()
(在jQuery事件处理程序中返回false
时将触发)将允许您停止并阻止完全相同的事件在父级上进一步处理节点
在您的实例中,您需要自己的逻辑。使用一些变量并正确设置它们并在必要时检查值。例如,点击即可设置FOOBAR = true
,然后在blur
中检查if( FOOBAR )
并对其进行操作。
答案 1 :(得分:0)
试试这个
<form id="form1" runat="server">
<div>
<input type="text" id="txt1" />
<input type="button" id="btn1" value="Submit"/>
</div>
</form>
javascript代码
$("#txt1").on("blur", function (event) {
event.preventDefault();
alert('blur');
return false;
});
$("#btn1").on("click", function (event) {
event.preventDefault();
alert('click');
return false;
});
还要对其进行测试here并记住{jumery 1.9中使用live
而不是on
在jquery 1.9或更高版本中删除live
关键字。
答案 2 :(得分:0)
您需要销毁一个事件,请参阅演示
希望这会对你有所帮助。
jsfiddle.net/rkumar670/5a86V
答案 3 :(得分:0)
Here是通过添加超时来解决它的一种方法。
var inFocus = false;
$("#txt1").focus(function () {
inFocus = true;
$("#log").prepend("<p>focus</p>");
});
$("#txt1").blur(function () {
setTimeout(function(){inFocus = false;},200);
$("#log").prepend("<p>blur</p>");
});
$("#btn1").click(function () {
if (!inFocus) {
$("#log").prepend("<p>click</p>");
}
});
在fiddle example中,我将日志输出到窗口。