10

.preventDefault()ユーザーが[ENTER]キーをクリックしたときにフォームの送信を防ぐためにjQueryを使用しています。問題は、送信ボタンをクリックするとフォームの送信も停止することです。

に関してStackoverflowには多くのスレッドがあるようです.preventDefault()が、どれも私の問題に対処していません。

これが私が現在取り組んでいるコードです。

// Part of my form
<form id="subscription_order_form" class=""  method="post" action="some_url"> 
  <button id="btn_order" type="submit">Order</button>
</form>

// Prevent the form to be submitted on ENTER
$('#subscription_order_form').submit(function(e){
  e.preventDefault();
});

// Controll data
$('#btn_order').click(function(){
  checkMandatoryFields();
});


// Check mandatory fields before subitting:
function checkMandatoryFields(e){

  // Code for testing here

  // Set "error" message and abort submission
  if(msg.length > 0) {
    // Do something
  } else {

    //submit or trigger is not recognized as functions
    $('#subscription_order_form').submit(); //.trigger('submit');

  }
}

ボタンのクリックでフォームを送信するための彼のコードを教えてください。

4

5 に答える 5

31

jQuery オブジェクトではなく、DOM ノードで送信イベントをトリガーします。

$('#subscription_order_form')[0].submit();

また

$('#subscription_order_form').get(0).submit();

また

document.getElementById("subscription_order_form").submit();

これにより、jQuery バインド イベントがバイパスされ、フォームが正常に送信されます。

于 2012-07-20T14:44:03.427 に答える
5

送信ボタンを通常のボタンに変更し、その onClick イベントで送信を処理します。

私の知る限り、フォームが Enter キーによって送信されたのか、送信ボタンによって送信されたのかを知る方法はありません。

于 2012-07-20T14:38:06.663 に答える
5

使用する必要があります

$(this).parents('form').submit()
于 2012-07-20T14:39:14.520 に答える
5

これを置き換えます:

$('#subscription_order_form').submit(function(e){
  e.preventDefault();
});

これとともに:

$('#subscription_order_form').on('keydown', function(e){
    if (e.which===13) e.preventDefault();
});

フィドル

これにより、キーのデフォルトのアクションが妨げられるため、Enter キーが押されたときにフォームが送信されなくなりますが、クリックするとフォームは正常に送信されます。

于 2012-07-20T14:42:55.453 に答える
0

わかりました、最初e.preventDefault();は Jquery 要素ではなく、javascript のメソッドです。このメソッドを追加すると、イベントの送信を回避できます。今できることは、このような ajax でフォームを送信することです。

$('#subscription_order_form').submit(function(e){
    $.ajax({
     url: $(this).attr('action'),
     data : $(this).serialize(),
     success : function (data){

      }
   });
    e.preventDefault();
});
于 2012-07-20T14:41:12.770 に答える