0

私のフォームでは、ユーザーが詩を送信できます。

そのページに新しいユーザー名のフィールドがある場合があります(誰もログインしていない場合)。その場合、ボタンのクリックをオーバーライドして、最初にサインアップするようにします。

$('#submit-poem').click ->
  $('input[type=submit]').attr('disabled', true)
  if $('#new_poet_name_field').length
    signUp();  // This will submit the poem form after registering
    false
  else
    console.log("A poet was already logged in!")
    true

これは以前は正常に機能していました。ただし、がないnew_poet_name_field場合、送信ボタンは無効のままになります。フォームtrueの送信に使用される返品。さて、がない$('#new_question')[0].submit()場合は明示的に行う必要がありpoet_name_fieldます。

true返送時にフォームが送信されないのはなぜですか?私の回避策は気になります。フォームが2回送信される可能性があります。1回は明示的に送信したとき、もう1回trueは返送されたときです。

4

2 に答える 2

1

詩を提出する代わりに誰かにサインアップさせたい場合は、フォームの「submit」イベントにバインドし、preventDefault /returnfalseを使用する必要があります。このように、ボタンの無効化/有効化を行う必要はありません。

于 2012-08-29T20:22:28.060 に答える
0

フォームがないという考えは嫌いです。その無効であり、HTMLの仕様に従わないようにしてください。

すべての建設的なフォーム要素は、フォームタグ内にラップする必要があります。フォームの送信は複数の方法で制御できます。


あなたが使用しているコードはひどいです

  1. どうして??複数の送信ボタンがありますか?以下のコードは、ページ上のすべての送信ボタンを無効にします。これは他の形式でもかまいません。

    $('#submit-poem').click ->
      $('input[type=submit]').attr('disabled', true) 
    
  2. これは提出の信憑性をチェックする間違った方法であり、firebugのようなツールで簡単に操作できます。

    if $('#new_poet_name_field').length
        signUp(); 
    

ユーザーがログインしているかどうかを確認する場合は、サービスページにajaxリクエストをすばやく送信して、その情報を取得できます。

$('#submit-poem').click(function() {
    $(this).attr('disabled', true)
    $.post("yourservicepage.php", {}, function(data) {
          // RE suppose, data is the boolean value from server indicating logged in or not
          if(data != true) {
             signup(); //if not logged in then signup
          }
          //...
    });
});
于 2012-08-29T20:25:33.313 に答える