0

プロトタイプjsで送信されるフォームを停止する方法に問題があるか、知識が不足しているようです。多分誰かが私が直面している問題で私を助けることができます

この単純な形式を検討してください

<form id="formContact" method="post">
    <p>Name:
        <br />
        <input type="text" id="name" name="yourName" size="20" />
    </p>
    <p>E-mail:
        <br />
        <input type="e-mail" name="yourEmail" size="20" />
    </p>
    <p>Message:
        <br />
        <textarea cols="20" rows="10" name="yourMessage"></textarea>
    </p>
    <p>
        <input type="submit" value="Submit this form" name="submitButton" />
    </p>
</form>

そして、protoypeマニュアルhttp://prototypejs.org/doc/latest/dom/Event/stop/からのこの小さなjsスニペット

Event.observe('formContact', 'submit', function (event) {
    var login = $F('name').strip();
    if ('' == login) {
        Event.stop(event);
        // Display the issue one way or another
    }
});

$('formContact').submit();

このすべてをフィドルで:http://jsfiddle.net/C3eFu/2/

ここでの問題は、ボタンがクリックされた場合にフォームが完全に停止することですが、フォームがjavascriptで送信された場合は停止しません。これは、プロトタイプがイベントを停止できない1%ですか?

4

2 に答える 2

1

.submit()多くのGoogleによると、メソッドが呼び出されたときにonsubmitイベントがフォームで発生しないようです。これはPrototypeJSの欠如ではなく、Javascriptで修正されていない動作です。

ハンドラーを呼び出してonsubmitイベントが停止するかどうかを監視し、送信を実行することを決定することで、コードを希望どおりに動作させることができます。method()

于 2013-03-25T16:11:14.753 に答える
1

簡単な方法は、代わりにボタンのクリックイベントをキャプチャするように変更type="submit"するか、送信イベントをキャプチャすることです。type="button"

function stopDefAction(evt) {
     evt = evt || event;
     if (evt.preventDefault) {
          evt.preventDefault();
     }
     else {
          evt.returnValue = false;
     }
}

参照:IE 9でのイベントの停止(プロトタイプ1.7にアップグレードせずに)

于 2013-03-25T16:11:29.873 に答える