8

次のフォームがあります。

<form id="my-form" ...>
    ...
    <button type="submit" name="bttnsubmit" value="1">The first button</button>
    <button type="submit" name="bttnsubmit" value="2">The last button</button>
</form>

次のコマンドを使用して、フォーム送信イベントをトリガーしたものを検出したいと思います。

$('#my-form').submit(function(){
    //psuedo code
    if($('[name=bttnsubmit]').val() == 1) {
        ....
    }
});

明らかに、そのセレクターは常に最初に出くわしたbttnsubmit要素の値を返すので、他の魔法のセレクターやフィルターなどが必要です。

私は$('[name=bttnsubmit][clicked=true]')宣伝されているのを見てきましたが、それは私の試みではまだうまくいきませんでした...

もちろん私は頼ること$('[name=bttnsubmit]').click()ができますが、フォーム送信イベントで私の目標を達成できることを望んでいます。

どんな助け/ヒントも大歓迎です。

4

4 に答える 4

12

組み込みのイベントデータがあるかどうかはわかりませんが(おそらくあるかもしれません)、頭に浮かぶアイデアの1つは、ボタンのクリックイベントを処理し、値のグローバル参照を保存することです。このようなもの:

var ButtonValue;

$('button[type="submit"]').click(function(e){
   ButtonValue = $(this).val();
});

$('#my-form').submit(function(){
    //psuedo code
    if(ButtonValue == 1)
    {
        ....
    }
});
于 2013-01-31T15:04:11.983 に答える
7

この回答は、@musefanの回答を改善したものです。

グローバル変数は避けてください。データを次の形式で保持することをお勧めします。

$('button[type=submit]').click(function (e) {
    var button = $(this);
    buttonForm = button.closest('form');
    buttonForm.data('submittedBy', button);
});

そして、送信ハンドラーでそれを取得します。

$('#my-form').submit(function (e) {
    var form = $(this);
    var submittedBy = form.data('submittedBy');
    if(submittedBy.val() == 1) {
        // Any code here...
    }
});

「Enter」を押すと、フォームを送信できます。変数で回避nullするには:submittedBy

var submittedBy = form.data('submittedBy') || form.find('button[type=submit]:first');
于 2014-03-26T12:21:38.940 に答える
1

HTML DOMは、要素がクリックされるとアクティブな要素プロパティをスローします。DOMで現在フォーカスされている要素を返します。送信ボタンをクリックしてフォームを送信すると、Jqueryでこの要素を検出し、必要な操作を実行できます。この方法は、要素をからbutton type="submit"に変更しても機能するため、他の方法よりも優れていますinput type="submit"。要素のIDとクラスを変更しても、引き続き機能します。送信ボタンと入力ボタンの両方を追加することも、追加するボタンの数に関係なく機能することもあります。Jqueryでこのボタンを検出するには、このコードを使用してアクティブな要素を検出できます。

$('#my-form').submit(function(){
   var value=$(document.activeElement).val();
//psuedo code
    if(value == 1)
    {
        Your code....
    }
});

上記のコードは、フォームが送信されたときにクリックされたボタンを返します。このコードは、送信属性を持たないボタンをクリックしてフォームを送信しようとしたり、フォームの外部にあるボタンをクリックしたりする場合や、クリックして仮想フォームを作成して送信する場合にも役立ちます。 。

PS Firefox 45以降、Chrome67以降でテスト済み

于 2021-08-13T14:57:17.920 に答える
0

あなたの声明について:

$('[name = bttnsubmit] [clicked = true]')が宣伝されているのを見たことがありますが、それは私の試みではまだ機能していません...

私はこれが他の場所で正しく説明されていないことに気づきました。それは自動的なことではありません。送信ボタンがクリックされるたびに「clicked」属性を追加して設定する必要があります。

$("#my-form input[type=submit]").click(function () {
    $("input[type=submit]", $(this).parents("form")).removeAttr("clicked");
    $(this).attr("clicked", "true");
});
$("#my-form").submit(function () {
    var clickedSubmitValue = $("input[type=submit][clicked=true]").val();
    if (clickedSubmitValue == "1")
    {
        ...
    }
});

ここの例に似ています。

于 2014-03-10T18:00:06.030 に答える