9

ユーザーがクリックした後に入力を無効にするこの関数があります:

$('.click-off').click(function () {
    var btn = this;
    setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
    return true;
});

そして、私はjavascriptの確認でこの入力を持っています:

<input type="submit" class="click-off" onclick="return confirm('Are you sure?');" value="Delete">

確認ボックスで「キャンセル」をクリックしても、$('。click-off')。click()イベントが呼び出され、ボタンが無効になります。

$('。click-off')。click()は多くの入力で使用されるため、確認をその中に入れることはできません。

$('。click-off')。clickイベントで確認リターンを確認するにはどうすればよいですか?または、$('。click-off')。clickイベントが呼び出されないようにしますか?

4

3 に答える 3

10

そもそも、なぜこれらのロジックを分離するのでしょうか。問題を回避するための2つの方法を次に示します。

ロジックを1つのメソッドに結合します。

$('.click-off').click(function () {
    // escape here if the confirm is false;
    if (!confirm('Are you sure?')) return false;
    var btn = this;
    setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
    return true;
});

グローバル変数(またはできればオブジェクト)を使用します。

var clickOffConfirmed = false;

<input type="submit" class="click-off" onclick="clickOffConfirmed = confirm('Are you sure?');" value="Delete" />


$('.click-off').click(function () {
    // escape here if the confirm is false;
    if (!clickOffConfirmed) return false;
    var btn = this;
    setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
    return true;
});
于 2012-12-27T18:00:39.250 に答える
2

確認ボックスをキャプチャしてから、ボタンを無効にしてみてください。

$('.click-off').click(function () {
  var r=confirm("Press a button");
  if (r==true)
  {
    $(this).attr('disabled', 'disabled');
  }
  else
  {

  }
});

onclickも削除します

于 2012-12-27T18:02:15.357 に答える
1

jqueryとonclickの両方でアクションをフックすることは避けてください。これは、主に、すぐにコードが完全に失われるためです。

したがって、たとえば、これを行うことができます。

$('.click-off').click(function () {

   var r=confirm("Are you sure?")
   if (r==true)
   {
       var btn = this;
       setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
       return true;
   }
   else
   {
       //nothing to do here
   }

});

そして、onclickイベントを削除します。したがって、すべてを1か所にまとめることができます。

あなたの例では、クリックイベントに2回フックすると、お互いの結果にもかかわらず、両方が起動されます。

于 2012-12-27T18:01:53.843 に答える