1

私はこれをかなり探しましたが、解決策を見つけることができないようです。私が抱えている問題は、関数が定義されている場合、で関数を使用してもjQuery Submit機能buttonしないことです。callbackたとえば、これは私が持っている小さなテストコードです:

JavaScript

function doSomething() {
    alert("Called the function");

    jQuery("#form").bind("submit", function() {
        alert("Form was submitted.");
    });
}

HTML

<form id="form" action="">
    <input type="button" onclick="javascript: doSomething();" value="From Button">

    <input type="submit" onclick="javascript: doSomething();" value="From Submit">
</form>

これで、2番目をクリックしてもbutton、2番目のアラートは表示されません。[I]をクリックするsubmitと、両方のアラートメッセージが表示されます。私が見つけたのは、callback関数を削除すると、フォームの送信が両方のボタンで正常に機能することです。フォームにを追加しようとしonSubmitましたが、それも機能しませんでした。

私が使用を許可されている(そして変更を許可されていない)jQueryのバージョンはjQuery1.3.2です。非常に古いバージョンであることは知っていますが、企業上の理由から変更することはできません。

4

4 に答える 4

2

そのはず

jQuery("#form").bind("submit", function() {
    alert("Form was submitted.");
});

function doSomething() {
    alert("Called the function"); 
}

submit送信が行われる前に、ハンドラーをバインドする必要があります。あなたの場合、フォームの送信が行われ、ハンドラーを登録しています。

于 2013-02-05T03:41:48.860 に答える
1

onclick属性をinput要素に追加してdoSomethingを呼び出したため、混乱しているので、どちらか一方だけが必要です。この関数内のjQueryは、「doSomething」関数の外部に配置しない限り呼び出されません。

于 2013-02-05T03:42:26.053 に答える
1

さて、ここで言うことは複数あります。

まず、「送信」ハンドラーをフォームにバインドしました。フォームにはボタンではなく「送信」イベントがあるため、これは正しいです。

第二に、HTMLタグは、タイプが「送信」でない限り、フォームを送信しません。これが、フォームの送信ハンドラーにバインドしたハンドラーが実行されない理由を説明しています。

第3に、.bind()を実行するたびに、ハンドラーの別の「コピー」がイベントにバインドされるため、最後にタグをクリックすると、複数回実行されます。

そして第4に、onclick = ""属性に"javascript:"を記述する必要はありません。実際、アクティブなjavascriptコードをHTMLから除外し、代わりに、上記のように、jQueryに渡される関数でイベントをバインドすることをお勧めします。http://api.jquery.com/ready/を参照してください

最後に、送信の直前にアラートを実行しているため、フォームの送信をキャンセルすることをお勧めします。http://api.jquery.com/event.preventDefault/を調べてください。

これがあなたが実際に望むかもしれないことをするjavascriptコードです:

    jQuery(function ($) {
            $('#form').submit(function (e) {
                    // do what you have to do
                    e.preventDefault();
            });
    });
于 2013-02-05T03:46:43.530 に答える
0

何が起こっているのかというと、ユーザーが送信ボタンをクリックするたびに、新しい「送信」コールバックをバインドしているということです。doSomething関数はまったく必要ありません。これを試して:

var $submit = $("#submitButton").bind("submit", function(){
    console.log("submit");
});

..。

<form>
     <input type="text" />
     <input type="button" />
     <input id="submitButton" type="submit" />
</form>
于 2013-02-05T03:43:39.250 に答える