7

ページには次のような多くのフォームがあります。今、ユーザーがクリックした送信ボタンに基づいてフォームアクションを変更したい(そしてもちろんフォームを送信する)

<form action="/shop/products.php" data-ajax="false" method="post">
    <div data-role="fieldcontain">

        <input name="submit" class="obutn" type="submit" value="Order" />
        <input name="submit" class="oEbutn" type="submit" value="Extras" />

    </div>
</form>

で試しました

$(".obtn").click(function() {
    $(this).parent().parent().attr("action", "/shop/products.php");     
});
$(".oEbtn").click(function() {
    $(this).parent().parent().attr("action", "/shop/extras.php");       
});

ただし、フォームは常に products.php に送信されます。何が悪いのか教えていただけますか?

4

5 に答える 5

7

2 つのタイプミスがあります。

  • obtnそれ以外のobutn
  • oEbtnそれ以外のoEbutn

別の提案はclosest("form")、クリックされたボタンを含むフォームを取得するために使用することです。

$(".obutn").click(function() {
    $(this).closest("form").attr("action", "/shop/products.php");     
});
$(".oEbutn").click(function() {
    $(this).closest("form").attr("action", "/shop/extras.php");       
});

$("form").on("submit", function () {
    alert($(this).attr("action"));
});

JSFIDDLE

于 2013-07-15T18:51:45.710 に答える
2

送信イベントをキャプチャし、クリックされたボタンを特定します。そこから、フォームのアクションを変更できます。

これを行う方法に関するリンクを次に示します。

フォーム送信イベントから送信を引き起こしたボタンを取得するにはどうすればよいですか?

于 2013-07-15T18:56:19.137 に答える
1

また、クリックがまったく発生するまでフォームにアクションを与えないでください。これは不要です。

<form data-ajax="false" method="post">
   <div data-role="fieldcontain">

        <input name="submit" class="obutn" type="submit" value="Order" />
        <input name="submit" class="oEbutn" type="submit" value="Extras" />

    </div>
</form>
于 2013-07-15T18:57:09.393 に答える