-1

ページ上のすべてのリンクに対して関数を実行し、条件が満たされた場合に関数を元に戻そうとしています。

$('a').click(function(){
    //some function
  if ( /*some condition*/ ) {
    $(this).//undo above function
  }
});

注:私は使用しようとはしていませんunbind()。関数自体を元に戻そうとしています。ご不明な点がございましたら、あらかじめお詫び申し上げます。不明な点がございましたら、お気軽にお問い合わせください。ありがとう。

4

3 に答える 3

0

やってみました:

$('a').click(function(){
    //some function
  if ( /*some condition*/ ) {
    $(this).click(function() { return false; });
  }
});

編集:最初は実際には思いつかなかった、かなり一般的な別の方法があります。すべての<a>タグに対してこれを行っているので、delegateandundelegate関数を使用してイベントを登録できます。jqueryの最新バージョンでは、これは.onand.offメソッドを使用して行われます。

$("body").on("click", "a", function() {
    //some function
    if ( /*some condition*/ ) {
        $(this).off("click");
    }
});

http://api.jquery.com/delegate/
http://api.jquery.com/undelegate/
http://api.jquery.com/on/
http://api.jquery.com/off/

于 2012-07-12T16:59:41.653 に答える
0

はい、方法はあります。undoただし、今行ったことを元に戻す魔法の関数を呼び出すほど単純ではありません。自分でコードを記述し、今実行した手順の逆を実行する必要があります。

したがって、の代わりに// some function、実際には次のものがあった場合:

$(this).addClass('blue'); // add the class 'blue' to the link

それを元に戻すには、呼び出す必要があります

$(this).removeClass('blue');

blueリンクへのクラスの追加を元に戻します。

明らかに、要素を使って複雑なことを行えば行うほど、その要素が難しくなりundoます。たとえば、要素を新しい位置に移動する場合は、移動する前に現在の位置を保存する必要があります。これにより、必要に応じてどこに戻すかがわかります。

場合によっては、要素自体のクラス、属性、イベント ハンドラーなどを操作するだけの場合は、変更を加える前に要素を複製する方が簡単な場合があります。そうすれば、関数を「元に戻す」ことは、現在の要素を変更前のクローンに置き換えるのと同じくらい簡単です。

于 2012-07-12T17:13:22.867 に答える
0

「addClass」のような単純なケースでは、反対の関数を簡単に見つけることができます。より複雑な操作については、do 関数と undo 関数を記述することをお勧めします。これをすべて管理するには、元に戻すコントローラーを使用できます。私の元に戻すマネージャーを見てください。これを処理する方法を教えてくれるかもしれません。または、コードにプラグインすることもできます。

https://github.com/ArthurClemens/Javascript-Undo-Manager

于 2012-07-12T21:42:02.627 に答える