2016-09-06 7 views
0

通常動作するさまざまな方法を試しましたが、SmartWizardでこれらのメソッドが機能しないようです。最初のクリック後に[完了]ボタンを無効にする方法

複数の送信を防ぐために、[完了]ボタンを無効にしてクリックした後にテキストを変更する必要があります。どこにコードを配置しても、画面は変更されず、ボタンの値は変更されず、ボタンは無効になりません。

私はまた、右のAJAX呼び出しの前に最終段階の検証の一環として、およびFinishCallbackでこれを使用してみました...

$(".actionBar .buttonFinish").click(function(){ 
    $(".actionBar .buttonFinish").addClass("buttonDisabled"); 
    $(".actionBar .buttonFinish").text("Sending..."); 
}); 

を一般的なクリック機能を試してみました。 ajax呼び出しが完了し、ajaxの成功が終了するまでは何も変わりません。

UPDATE

[OK]を、これは確かにタイミングの問題のためです。 ajax呼び出しを失敗させると、ボタンは無効になり、テキストが変更されます。私はこれらの2つのことがajax呼び出しに移る前に起こることを確認する必要があります。これまでのところ、私はこれを試してみましたが、それはうまくいきませんでした:

$(".actionBar .buttonFinish").addClass("buttonDisabled").text("Sending...").ajax({ 
+0

あなたは必ずクリックハンドラが発射されていることを確認するために、物事へのロギングを追加しようとしたことがありますか? – Whothehellisthat

+1

jQueryの 'prop'関数を使って' disabled'属性をtrueに設定してみてください。 '$("。actionBar .buttonFinish ")。prop( 'disabled'、true);'

+0

$( "。actionBar .buttonFinish")。オフ( 'クリック') – gaetanoM

答えて

-1

は試してみてください。この

<input type='button' id='btn' onclick='click_me()' value='click'> 

    var disable = false; 
    function click_me() 
    { 
    if(disable = 'false') { 
     $(".actionBar .buttonFinish").addClass("buttonDisabled"); 
     $(".actionBar .buttonFinish").text("Sending..."); 
     disable = true; 
    } 
    } 
+0

実際の無効はどこですか?クラスを追加して無効にすることは、実際に無効にすることと同じではありません。 – NoobishPro

+0

SmartWizardは実際にはアンカータグである「ボタン」を作成します:Purchase

+0

これでonclickイベントをonfocusで置き換え、if条件内でメソッドを追加することができます...そして、yuはonclickイベントをアンカータグに追加できますURLアンカータグ – Aks

0
$(".actionBar .buttonFinish").click(function(){ 
    $(".actionBar .buttonFinish").attr('disabled', 'disabled'); 
    $(".actionBar .buttonFinish").text("Sending..."); 
}); 
あなたはボタンを無効にする「のonclick」イベントの最後にこれを追加することができます
+0

いいえいいえ。この関数は起動しますが、ajax呼び出しが実行された後に起動するように見えます。私はそれをアヤックスの前に走らせる必要がある。 –

+0

あなたはbeforeSendを試しましたか?function(){}、 – Ankneema

0

$(this).prop("disabled", true); 

OR

$(this).attr("disabled", 'disabled'); 

jqueryのバージョンに応じて、 'prop'または 'attr'関数を使用する必要があります。

+0

いいえいいえ。リンクボタンは無効にならず、テキストはajaxメソッドが実行されるまで変更されません。 SmartWizardが最初にその機能を実行しているようです。 –

+0

私はSmartWizardについてはわかりません クリックファンクションの先頭またはajaxリクエストの直前に無効コードを追加してください – zakaria35

0

これを試してみてください。

$(document).ready(function(){ 
 
    $(function(){ 
 
    $(".buttonFinish").on("click", function(){ 
 
     $(this).prop('disabled', true); 
 
     $(this).val("Sending..."); 
 
    }); 
 
    }); 
 
});
input{ 
 
    display: block 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
 

 
<div> 
 
    <form> 
 
    <input type="text"> 
 
    <input type="text"> 
 
    <input class="buttonFinish" type="submit"> 
 
    </form> 
 
</div>

UPDATE

あなたはAJAX呼び出しの前にボタンやテキストを無効にしたい、私はあなたを理解している場合、私は見てみましょうか?あなたはbeforeSendで試したことがありますか?

$(document).ready(function(){ 
 
    $(function(){ 
 
    $("form").submit(function(e){ 
 
     e.preventDefault(); 
 
     
 
     $.ajax({ 
 
     beforeSend: function(){ 
 
      $(".buttonFinish").prop('disabled', true); 
 
      $(".buttonFinish").val("Sending..."); 
 
     }, 
 
     complete: function(){ 
 
      // remove disabled and change the text 
 
     }, 
 
     }); 
 
    }); 
 
    }); 
 
});
input{ 
 
    display: block 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
 

 
<div> 
 
    <form> 
 
    <input type="text"> 
 
    <input type="text"> 
 
    <input class="buttonFinish" type="submit"> 
 
    </form> 
 
</div>

+0

ajaxコールの前にFinishボタンを無効にする必要があります。 Ajaxがボタンの前に実行されると、変更が反映されます。したがって、Ajaxコールが遅くなったり遅れたりすると、ユーザーは何度もクリックし続けて何度も送信することができます。 –

0

あなた.buttonFinishリンク、ではない実際にボタンあるので、あなたは.prop('disabled', true)でそれを無効にすることはできません - あなたの代わりに「ブロッキングペイン」を使用することをお勧めします。

ページの最後にdivを挿入すると、何も表示されず、見えなくなり、高さと幅がなく、</body>タグの直前に表示されます。

<div id="blocker"></div> 
</body> 

「ボタン」をクリックすると、それは「前に」であるので、そのページの完全な高さ/幅を使用して、それが示すようになりますそれにクラスを追加し、高Zインデックス付きのほかのすべて;下のZインデックスとしてその下のコントロールに渡されないすべてのクリックを取得します。
あなたのクリックハンドラは$('blocker').addClass('blocking');がブロックページの残りそうなスタイル#blocker.blocking、その後、それが見えないスタイル#blockerに結果のDOM ...

<div id="blocker" class="blocking"></div> 
</body> 

使用CSSを与える含まれます。

$('a.finished').click(function(e) { 
 
    e.preventDefault(); 
 
    $('#blocker').addClass('blocking'); 
 
    // when ajax call finishes, 
 
    // use $('#blocker').removeClass('blocking'); 
 
});
#blocker { 
 
    position: fixed; 
 
    top: -10px; 
 
    left: -10px; 
 
    height: 0; 
 
    width: 0; 
 
    z-index: -20; 
 
    background-color: white; 
 
} 
 

 
#blocker.blocking { 
 
    height: auto; 
 
    width: auto; 
 
    bottom: -10px; 
 
    right: -10px; 
 
    opacity: 0.6; 
 
    z-index: 9000; 
 
}
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.js"></script> 
 
<div class="stuff"> 
 
    <p>This is stuff</p> 
 
    <p>This is other stuff</p> 
 
    <p>A <a href="#" class="finished">link</a> is in here.</p> 
 
</div> 
 
<div id="blocker"></div>

関連する問題