Javascript 是否可以从另一个事件中取消java脚本事件?

Javascript 是否可以从另一个事件中取消java脚本事件?,javascript,javascript-events,Javascript,Javascript Events,我想知道,是否可以从另一个事件中取消队列中的下一个java脚本事件 问题: 我有两个ASP.Net控件, 年龄-文本框 保存按钮 有两个java脚本验证函数, ValidateAge()-检查有效年龄(0>=年龄可能发生的情况是您的表单正在提交,因此该按钮实际上没有触发onclick事件(因为它没有被这样单击!)。如果在其中一个表单字段中单击enter,您可能会注意到相同的行为(即使使用txtAge字段!),因为这也会导致表单提交 在这种情况下,最简单的方法是将ValidatePage函数注册为

我想知道,是否可以从另一个事件中取消队列中的下一个java脚本事件

问题:

我有两个ASP.Net控件, 年龄-文本框 保存按钮

有两个java脚本验证函数,
ValidateAge()-检查有效年龄(0>=年龄可能发生的情况是您的表单正在提交,因此该按钮实际上没有触发
onclick
事件(因为它没有被这样单击!)。如果在其中一个表单字段中单击enter,您可能会注意到相同的行为(即使使用
txtAge
字段!),因为这也会导致表单提交

在这种情况下,最简单的方法是将
ValidatePage
函数注册为表单上提交事件的处理程序:

<form onsubmit="ValidatePage()">

虽然我很感激您使用WebForms,因此这可能会很困难。每当我在WebForms中进行客户端验证时,我总是依赖jQuery.validation插件。如果您已经依赖jQuery,那么它提供了一个非常简洁的模型来进行验证。它不能很好地使用WebForms开箱即用,您需要重新设计o为使其正常工作而进行的小游戏。Dave Ward在此处的帖子可能会有所帮助:

是否可以从另一个事件中取消java脚本事件

不,通常不是。而且,不能取消对焦,而且根据它的说法,对焦很复杂

然而,我不认为当用户试图离开一个元素(并聚焦下一个输入)时保持焦点是非常友好的-只显示离开的输入的验证失败。您真正应该防止的唯一事件是
submit
,当验证失败时,您可以聚焦第一个无效字段

var ageValid;
$("#txtAge").change(function validateAge(e) {
    if(!isNaN(this.value) && this.value >= 0) {
        ageValid = true;
    } else {
        $(this).addClass("invalid");
        ageValid = false;
    }
}).change();
$("#formid").submit(function validatePage(e) {
    // maybe calls to the single validation functions?
    if (! ageValid) {
        e.preventDefault();
        $("#txtAge").focus();
        return false;
    }
});

谢谢..实际上我有很多验证要做..所以我很想知道是否有任何方法可以取消事件而不从validatepage调用验证函数…我想在那里调用它们(再次)是最好的方法。你能始终确保它们会被独立触发吗?是的,我同意再次调用它们是最好的。但我们现在只在应用程序中引入AccessKey功能。到目前为止,验证是在控件的“onblur”中单独完成的。因此在使用AccessKey之前没有问题。想想fin正在修复代码更改较少的修复。在引入acceesskeys之前,当您单击“保存”时,应用程序中发生了什么按钮时输入了无效的年龄?当我们单击save时,将首先执行onblur事件,如果返回false,则单击事件根本不会启动…我不确定为什么在这种情况下会调用单击事件..我强烈建议使用jQuery和验证插件。jQuery将消除处理ev不一致的问题在不同的浏览器中,验证插件是可定制的(注意:您通常不必编写代码,只需为其提供一个配置对象)并处理所有模糊/提交的东西无缝。这将节省大量的时间为一个形式的任何复杂的阿伦,请考虑标记我的回答作为答案,如果这对你有帮助。
<form onsubmit="ValidatePage()">
var ageValid;
$("#txtAge").change(function validateAge(e) {
    if(!isNaN(this.value) && this.value >= 0) {
        ageValid = true;
    } else {
        $(this).addClass("invalid");
        ageValid = false;
    }
}).change();
$("#formid").submit(function validatePage(e) {
    // maybe calls to the single validation functions?
    if (! ageValid) {
        e.preventDefault();
        $("#txtAge").focus();
        return false;
    }
});