javascript事件处理程序列表
javascript event handlers list
我正在尝试确定点击事件的优先级,以防触发两个事件点击和更改。
我有一个类似于"ValidateOnChange"answers"ValidateOn click"的全局函数,用于验证更改和点击事件时文本框的输入。
输入一些文本,它会显示错误消息。然后尝试输入正确的值并单击"提交"按钮,错误将消失,这将使用户单击该按钮两次。在这里,我正试图修复这种双击。
这是实物模型代码:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>
<body>
<div>Enter any string:</div>
<div><input type="text" id="txtInput" ></input></div>
<div id="divError" style="color: red; display: none;">Please enter 0</div>
<input type="button" value="Submit" id="btnSubmit" ></input>
<script type="text/javascript">
var mouseevent_var = null;
function ValidateOnChange(e) {
var input = $('#txtInput').val();
if (input == '0') {
$('#divError').hide();
} else {
$('#divError').show();
}
}
function ValidateOnClick(e){
alert("Hurray!!! You got it right!");
}
$('#txtInput').mousedown(function (e) {
mouseevent_var = e;
});
jQuery(document).ready(function(){
$('#btnSubmit').click(function(e){
ValidateOnClick(e);
});
$('#txtInput').change(function(e){
ValidateOnChange(e);
});
//User don't want error when they are typing in.
//$('#txtInput').keyup(function() {
//$('#txtInput').trigger("change");
//});
});
</script>
</body>
</html>
按键事件似乎是解决方案,但用户不希望在输入时弹出错误。
有没有办法列出所有触发的事件,这样我就可以为提交按钮过滤"mousedown"answers"mouseup"事件?或者有没有其他方法可以优先处理点击事件?
根据具体情况,可以有许多替代方案。为了避免双击问题,我做了一些小改动(修改了评论)。基本上,我们需要将mousedown事件绑定到按钮对象上。在那里,我们将把一个临时标志变量设置为true。同时,如果输入的更改事件被触发,则可以跳过检查临时标志变量是否为true。这里可以更好地解释双击触发按钮点击事件的原因:如何在更改事件处理程序中附加jQuery点击事件
您更新的js代码如下:
var mouseevent_var = false;
function ValidateOnChange(e) {
// Skip validation if the change event is fired due to user's click on submit button
if(mouseevent_var){ return false; }
var input = $('#txtInput').val();
if (input == 0) {
$('#divError').hide();
} else {
$('#divError').show();
}
}
function ValidateOnClick(e){
mouseevent_var = false; // Reset mouseevent_var to false
alert("Hurray!!! You got it right!");
}
$('#btnSubmit').mousedown(function (e) {
mouseevent_var = true;
});
jQuery(document).ready(function(){
$('#btnSubmit').click(function(e){
ValidateOnClick(e);
});
$('#txtInput').change(function(e){
ValidateOnChange(e);
});
//User don't want error when they are typing in.
//$('#txtInput').keyup(function() {
//$('#txtInput').trigger("change");
//});
});
上面的代码只是根据您的需要进行的修复。但也有其他更好的选择。理想情况下,您不应该有两个不同的验证函数来验证不同事件上的相同字段。你必须考虑用单一的功能来管理它。
相关文章:
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 如何保持引导程序下拉复选框列表下拉
- Twitter引导程序在下拉列表打开时停止传播
- 谷歌应用程序脚本示例-如何更改单选按钮的列表框相关值
- 谷歌表单-根据分配给谷歌应用程序的工作为商业用户预先填充多项选择列表
- jQuery,引导程序下拉列表问题
- 引导程序下拉列表显示不正确
- 使用谷歌应用程序脚本制作基于谷歌电子表格的带有列表框的网络应用程序
- 如何在TiddlyWiki中制作列表格式化程序
- 如何使用Python/Selenium网络驱动程序处理Angularjs/Javascript下拉列表
- Metro 应用程序中的列表视图项目单击
- 引导程序在单击另一个下拉列表时关闭下拉列表
- 引导程序选择下拉列表
- 引导程序的下拉列表不起作用
- 使用peta poco ORM在MVC应用程序中创建选择列表
- 引导程序 3 下拉列表不会更新
- 用angularjs填充引导程序下拉列表
- 表详细信息中的引导程序下拉列表
- 使用引导程序时无法禁用下拉列表
- 我试图分析以下js代码.这是一个待办事项列表程序.有人能解释一下每一步发生了什么吗?