如何从onchange事件处理程序停止执行click事件
How to stop execution of click event from onchange event handler
在以下示例中https://jsfiddle.net/anu4nits/449d5j8e/
<input type="text" id="in" />
<input type="button" value="click" id="button" />
$('#in').change(function () {
console.log('change event');
dialog.dialog("open");
});
$('#button').on('click', function (e) {
console.log('click event');
});
我附加了两个事件,一个是文本上的onchange
事件,另一个是按钮上的点击事件。如果我在文本框中写了一些东西并单击按钮,那么应该分别执行更改事件的处理程序和单击事件的处理。但是,当我在change事件的处理程序中调用模态对话框时,click事件的处理过程没有被执行,这是预期的,因为模态对话框不允许任何后台活动。但这只适用于Chrome和Mozilla。在IE处理程序中,正在执行这两个事件。
我希望所有浏览器的行为保持一致,最好不要在IE中执行点击处理程序。我也不想在全局级别设置一些用于条件检查的标志。此外,我无法将事件与按钮分离,因为在我的应用程序中,按钮ID及其处理程序是在运行时生成的有没有其他方法可以从change事件的处理程序中停止执行click事件
Click和Change都是独立的事件,它们有自己的堆栈。因此,你无法阻止一个元素与另一个元素的传播,因为它们的目标元素也不同。您可以做的是将事件附加到它们的公共父级,以便为它们提供一个公共处理程序。在那里你们可以设置标志并执行你们想要的操作。
我需要防止立即执行同一onchange
中定义的下一个函数,例如:
<input onchange="Dont(this);Work()">link</input>
在这里,我需要Dont()来有条件地停止所有进一步的函数,如Work()。我只是抛出了一个异常,因为其他任何操作都不起作用。
function Dont(button){
if($(button).data("somecondition")){
throw "NeedToStopEveryFurtherCodeExecution!";
}
}
事件.stopImmediatePropagation();没有帮助。我不知道为什么,但我认为在使用外部.js文件时存在问题。
我认为这比在onchange中传递的每个函数中使用条件来解决这个问题更简单。我希望这不是一种非常糟糕/不受欢迎的方式。
使用stopPropagation,但更简单的解决方案是使用标志
$('#in').change(function(e) {
console.log('change event');
dialog.dialog("open");
e.stopPropagation();
});
- jQuery:click() 执行而不是绑定
- 如何在jQuery中执行click()
- 在回调AngularJS ng-click样式中执行fn(param1,param2)
- button.click仅在前面有警告的情况下执行
- CodedUI Test + deferred/promise:Mouse.Click() 执行点击,调用 httpPo
- 使用 iframe 的内容在页面上执行 jquery .click()
- AngularJS - IE8 - 将$index传递给ng-click中的函数始终返回0并执行多次
- JQuery Click() 函数只执行一次
- AngularJS - 当使用指令生成标记时,无法使用ng-click执行方法
- 为什么 jQuery 会立即执行传递给 .click() 的函数
- 如何从onchange事件处理程序停止执行click事件
- jQuery在click事件上执行这两个条件
- 即使在类名上触发了click事件,也要对特定元素执行某些操作
- 如何在ASP.NET中的Javascript Confirmbutton Click上执行存储过程
- 如何用C#代替Javascript执行Click
- UFT在使用Web加载项时如何执行Click方法
- 只在第一次单击时执行.click(function())
- AngularJS&Protractor-在元素.isDisplayed()时执行.click()
- 执行.click()方法时jQuery$(element)未定义-在所有其他时间返回element
- 如何在保留以前的字段值的同时使用 innerHTML 创建新字段?如何在再次调用之前完全执行 .click