2

知りたいのですが、キュー内の次のJavaスクリプトイベントを別のイベントからキャンセルすることはできますか?

問題:

2つのASP.Netコントロールがあります。Age-TextBoxSave-Button

2つの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>

ここで、[年齢]フィールドに無効な年齢を指定して[Alt + S]を押すと、最初に年齢のオンブラーが呼び出され(AssociatedControlIDを設定したため)、次に保存ボタンのonclickが呼び出されます。

ここで何が起こるかというと、年齢が有効か無効かに関係なく、保存が実行されます。

年齢が有効でない場合は、テキストボックスの「onblur」イベントからボタンの「onclick」イベントをキャンセルする必要があります。

4

2 に答える 2

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/

于 2012-07-19T10:46:19.530 に答える
1

別のイベントから Java スクリプト イベントをキャンセルすることは可能ですか?

いいえ、一般的にはそうではありません。また、blurイベントをキャンセルすることはできません.jQueryでリンクをクリックしたときにblur()が実行されないようにする方法は? フォーカスを保持するのは複雑です。

それでも、ユーザーが要素を離れようとしたときにフォーカスを保持する (そして次の入力にフォーカスする) ことは、非常にユーザーフレンドリーではないと思います。離れた入力の検証の失敗のみを表示します。本当に防ぐべき唯一のイベントは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;
    }
});
于 2012-07-19T11:09:01.280 に答える