是否有可能从其他活动中取消javascript活动?

时间:2012-07-19 10:33:24

标签: javascript javascript-events

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

问题:

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

有两个java脚本验证函数, ValidateAge() - 检查有效年龄(0> =年龄< = 140),如果无效则提供警报 ValidatePage() - 检查页面中的所有必填字段,并保存是否填写了所有必填字段

<asp:TextBox ID="txtAge" TabIndex="1" DataType = "String" runat="server" MaxLength="50" CssClass="textBox" Style="width: 150px" CausesValidation="true" onblur="return ValidateAge();"></asp:TextBox>

并且为按钮

定义了一个访问键
<asp:Button ID="btnSave"  AccessKey="S" AssociatedControlID="btnSave" TabIndex="1" runat="server" CssClass="ButtonSaveNew" onclick="return ValidatePage();"></asp:Button>

现在,如果我在Age字段中按下'Alt + S'年龄无效,首先会调用Age的onblur(因为我设置了AssociatedControlID),然后调用保存按钮的onclick。

现在发生的事情是,无论年龄是有效还是无效,保存都会被执行。

如果年龄无效,我需要从文本框的'onblur'事件中取消按钮的'onclick'事件。

2 个答案:

答案 0 :(得分:2)

可能发生的事情是你的表单正在提交,因此该按钮实际上没有触发onclick事件(因为它没有被点击这样!)。如果您在其中一个表单字段中输入Enter(即使使用txtAge字段!),您可能会注意到相同的行为,因为这也会导致表单提交。

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

<form onsubmit="ValidatePage()">

虽然我很欣赏你使用的是WebForms,因此这很可能会很困难。每当我在WebForms中完成客户端验证时,我总是依赖于jQuery.validation插件。如果您已经依赖于jQuery,那么它提供了一个非常简洁的模型来进行验证。它与开箱即用的WebForms不能很好地兼容,你需要做一些游戏才能让它运行起来。 Dave Ward的帖子可能会有所帮助:http://encosia.com/using-jquery-validation-with-asp-net-webforms/

答案 1 :(得分:1)

  

是否可以从其他事件中取消java脚本事件?

不,一般不是。此外,blur event无法取消,根据how to prevent blur() running when clicking a link in jQuery?,抓住焦点很复杂。

然而,我不认为当用户试图离开元素(并且聚焦下一个输入)时保持焦点是非常用户友好的 - 只显示有叶输入的验证失败。您确实应该阻止的唯一事件是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;
    }
});