0

最初に送信がクリックされたときに送信されたくないフォームがありますが、2 回目は通常の送信のように機能するはずです。そのため、ロード時にフォームにクラスを追加しnot-submittable、最初のクリック後にそのクラスを削除しました...これにより、正常に送信されるはずです。しかし、これは起こりません。最初のクリックは期待どおりに機能し、クラスが削除され、ボタンのテキストが変更されます。ただし、2 回目のクリックはまったく同じことを行います。それで、私はここで何が欠けていますか?

jQuery:

  $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE').addClass('not-submittable');

  $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE.not-submittable').click(function(event) {
      $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE').removeClass('not-submittable');
      $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE').val('Continue');
      $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE').removeAttr('disabled');
    return false;
  });

JavaScript の前のボタン:

<input type="submit" class="Button" value="Submit Survey" id="ACTION_SUBMIT_SURVEY_RESPONSE" name="ACTION_SUBMIT_SURVEY_RESPONSE">
4

4 に答える 4

4

引用OP:「最初に送信をクリックしたときに送信したくないフォームがありますが、2回目は通常の送信のように機能するはずです。」

jQuery を使用して、最初のクリックのみ.one()をブロックします。submit

http://api.jquery.com/one/

$('#ACTION_SUBMIT_SURVEY_RESPONSE').one('submit', function(e) {
    e.preventDefault();
    // do what you need to do on first click
}

あるいは...

$('#ACTION_SUBMIT_SURVEY_RESPONSE').one('submit', function(e) {
    e.preventDefault();
    // do what you need to do on first click
    if ( some-condition ) {  // under certain conditions allow submit on first click
        $(this).submit();
    }
}
于 2013-02-01T16:47:54.217 に答える
3

を使用する代わりに、およびメソッドを使用してイベントをバインドおよびバインド解除して.click()みてください。あなたの場合:.on().off()

$('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE.not-submittable').on("click.stopSubmit", function(event) {

    $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE').removeClass('not-submittable');
    $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE').val('Continue');
    $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE').removeAttr('disabled');

    if (...conditions are met.....) {
        $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE.not-submittable').off("click.stopSubmit");
    }

    return false;
});

メソッドの最初のパラメーターは.on()ハンドラーの文字列表現ですが、名前空間「.stopSubmit」を追加していることに気付くかもしれません。ハンドラーの名前空間を指定すると、すべてのクリック ハンドラーではなく、特定の 1 つのクリック ハンドラーのバインドを解除できます。これの最も良い点は、元のハンドラーにまだ使用したいコードがある場合、別のクリック ハンドラーを作成してそのコードを実行でき、".stopSubmit" ハンドラーをバインド解除してもバインド解除されないことです。

.on()およびが推奨されるバインド/バインド解除方法であることに注意してください。jQuery では、 andは推奨され.off()なくなりました。.bind().unbind()


UPDATE特定の条件が満たされるまでバインドを解除しないというコメントを読んだ後、条件に呼び出しを
挿入できることを指摘したいと思います。.off()これを反映するようにコードを更新しました。

于 2013-02-01T16:44:16.857 に答える
1

このようなことができます

 $(document).ready(function () {

         $('#ACTION_SUBMIT_SURVEY_RESPONSE').click(function (event) {
             if (!$('#ACTION_SUBMIT_SURVEY_RESPONSE').hasClass(".not-submittable")) {

                 //do all conditions you wish on first click

                 //if condidition meets add this class to button
                 $('#ACTION_SUBMIT_SURVEY_RESPONSE').addClass(".not-submittable");

                 //stop form submit
                 event.preventDefault();
             }
             else {

                 //calls when button have .not-submittable class may be second or any no of clicks
                 $('#ACTION_SUBMIT_SURVEY_RESPONSE').removeClass('not-submittable');
                 $('#ACTION_SUBMIT_SURVEY_RESPONSE').val('Continue');
                 $('#ACTION_SUBMIT_SURVEY_RESPONSE').removeAttr('disabled');
                 //commented return false so form submits normally
             }
         });

     });    
于 2013-02-01T16:53:42.050 に答える
1

一致する必要がある特定の基準がある場合は、これを使用しsubmitableて、フォームの送信を可能にするロジックが含まれています。

var submit = $('form#survey_7042 #ACTION_SUBMIT_SURVEY_RESPONSE');
submit.addClass('not-submittable');

submit.click(function(event) {
    if (true == submitable) {
        submit.removeClass('not-submittable').val('Continue').removeAttr('disabled');
        submit.unbind();
        event.preventDefault();
    }
});
于 2013-02-01T16:44:39.077 に答える