0

ボタンクリック機能の参照を保持し、自分の作業を行ってから、元のクリック機能を実行したいと思います。

私は通常、document.readyでそのようなことができることを知っています。例:

    var originalOnClick = $("#myBtn").click;
    $("#myBtn").click = function() {
      // do my staff here, and only then call the original:
      originalOnClick();
    }

(間違っている場合は、このコードを修正してください!)

しかし、私には特別な場合があります。私のページのonLoad関数には、非同期のajax呼び出しがあります。そのため、document.readyで呼び出される関数は、実際にはajaxコードが終了する前に呼び出されます。

click()またはonclick()を呼び出すときにクリックイベントを変更する方法はありますか?つまり、クリックイベントの直前/直後に呼び出されるイベントはありますか?

または、(このページが読み込まれていることがわかります)ボタンをクリックするようにユーザーに依頼する必要があります。そうして初めて、スタッフを実行できますか?

編集1:ajaxコードは含まれているスクリプトに含まれています。変更できません。

編集2:考えられる解決策:元のボタンを非表示にしますが、そのイベントを使用します:

HTML:

 <div class="object1" style="display: none;" >original button.</div>
 <div class="object2">my button.</div>

JS:

function doMyStuff() {
    alert(' doMyStuff .');
}

$(document).ready(function(){

  $('.object1').click(function(){
     alert('original staff. ');        
  });  // actually, this is just a test code. In my project, I cannot edit this function

  $('.object2').click(function() {
   doMyStuff();
    $('.object1').click();      
  });
});
4

3 に答える 3

1

クリックイベントを作成して、それ自体をイベントハンドラーとして削除し、新しいイベントハンドラーを作成することができます。

function doNormalStuffWithClick() {
}

//First click
$('#myBtn').click(function() {
    // switch off this event handler
    $(this).off('click');
    // do stuff with first click
    // ....
    doNormalStuffWithClick();

    // Set up handler for subsequent clicks
    $("#myBtn").click(function() {
      doNormalStuffWithClick();
    });
}
于 2013-01-20T13:05:21.477 に答える
0

ajax機能が完了する前にユーザーがボタンをクリックしないようにしたいようです。これを行うにはいくつかの方法があります。最も簡単な方法は次のようになります。

var ajaxCount = 0;

$.ajax('some/url', function(res){
    ajaxCount++
    // code here
});

$.ajax('some/url', function(res){
    ajaxCount++
    // code here
});

$('#myBtn').click(function(e){
    if(ajaxCount != 2) return false;

    // code here
});

このフォームでは、両方のajax関数が起動したことを確認するだけです。

于 2013-01-20T13:03:18.517 に答える
0

AJAXリクエストが実行される前にコードをバインドすることが問題である場合は、次のコマンドで呼び出すことができますajaxSuccess

$(document).ajaxSuccess(function () {
    // do stuff
});

すべてのAJAXリクエストが終了した後に何かをしたい場合は、各リクエストの開始時に設定できる変数を確認できます。を使用ajaxStartして現在のリクエストの数を変更し、後でチェックインすることもできますajaxSuccess

$(document).ajaxStart(function () {
    // do something
});
于 2013-01-20T13:09:00.840 に答える