javascript事件处理程序列表
我正在尝试对单击事件进行优先级排序,以防触发两个事件单击和更改 我有一个类似于“ValidateOnChange”和“ValidateOnClick”的全局函数,用于验证更改和单击事件时文本框的输入 输入一些文本,它会显示错误消息。然后尝试输入正确的值并单击Submit按钮,错误消失,这使得用户单击按钮两次。在这里,我试图修复这个双击 以下是模型代码:javascript事件处理程序列表,javascript,jquery,asp.net,events,Javascript,Jquery,Asp.net,Events,我正在尝试对单击事件进行优先级排序,以防触发两个事件单击和更改 我有一个类似于“ValidateOnChange”和“ValidateOnClick”的全局函数,用于验证更改和单击事件时文本框的输入 输入一些文本,它会显示错误消息。然后尝试输入正确的值并单击Submit按钮,错误消失,这使得用户单击按钮两次。在这里,我试图修复这个双击 以下是模型代码: <html> <head> <script src="https://ajax.googleapis.
<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>
输入任意字符串:
请输入0
var mouseevent_var=null;
功能更改(e){
变量输入=$('#txtInput').val();
如果(输入='0'){
$(“#潜水员”).hide();
}否则{
$('#diveror').show();
}
}
功能验证单击(e){
警惕(“万岁!!!你说对了!”);
}
$('#txtInput').mousedown(函数(e){
mouseevent_var=e;
});
jQuery(文档).ready(函数(){
$('#btnsupmit')。单击(函数(e){
单击(e);
});
$('#txtInput')。更改(函数(e){
改变(e);
});
//用户不希望在键入时出错。
//$('#txtInput').keyup(函数(){
//$('#txtInput')。触发器(“更改”);
//});
});
keyup事件似乎是解决方案,但用户不希望在键入时弹出错误
有没有办法列出所有触发的事件,以便我可以过滤提交按钮的“mousedown”和“mouseup”事件?或者,是否有其他方法来确定单击事件的优先级?根据具体情况,可以有许多选择。为了避免双击问题,我做了一些小改动(修改了评论)。基本上,我们需要在button对象上绑定mousedown事件。在这里,我们将临时标志变量设置为true。同时,如果激发了输入的更改事件,则可以跳过检查临时标志变量是否为true。双击触发按钮单击事件的原因在此处有更好的解释: 您更新的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");
//});
});
以上代码只是根据您的需要进行修复。但也有其他更好的选择。理想情况下,您不应该有两个不同的验证函数来验证不同事件上的相同字段。您必须考虑使用单个功能来管理它。如果您使用的是html5,您可以使用
oninput
/input
事件。。。我不确定您想要做什么样的验证,因为您的函数似乎没有做什么或验证什么。根据验证的不同,可以使用不同的事件处理程序来实现更平滑的操作。另外,我不认为这是一个与asp.net相关的问题。我没有得到你的要求。你能解释一下你想通过上面的代码完成什么吗?你也可以做$('#diveror')。切换(输入!=“0”)代码>