2011-07-27 24 views
0

私は初めて自分の関数を作成しています$.fn.testing = function(){....};関数が2回実行されないようにする

しかし、まだ解決できない問題があります。

$('.target').testing("message" : "Hello!"); 
$('#test .target').testing("message" : "Hello world!"); 

関数「メッセージ」のポップアップを行います:それは、私は、ユーザーがするがありませんので、それを修正したい理由ですので、次のシナリオでは、スマートではありませんが、それは起こるかもしれません。だから、ユーザーがここで望んでいるのは、すべて.targetには "Hello!"というポップアップボックスがなければならないということです。この.targetのIDが#testの場合は、「Hello world!」というポップアップが表示されます。しかし、問題は、今すぐスクリプトがポップアップする "こんにちは!"そして "こんにちは!" .target#testがトリガーされたとき。

私は自分の関数で望むのは、関数がこのオブジェクトに対して既に呼び出されている場合に、関数がこのオブジェクトに対して既に呼び出されている場合に表示され、その場合は前の関数.unbind()です。

どうすればこの問題を解決できますか?うまくいけば私の説明は十分明確です!

(上記の例は少し単純化しているので、それを使用することについてはコメントしないでください)

ヘルプは歓迎です!

$('.target#test').testing("message" : "Hello world!"); 
$('.target:not(#test)').testing("message" : "Hello!"); 

EDITを - あなたはこのような何かを意味しています:

答えて

2

は、私はこれを行うだろうかです:ここ:プラグインで

var _myFunction = function() { 
    alert($(this).data("message")); 
}; 

この

jQuery.fn.testing = function(msg) { 
    this 
     .data("message", msg) 
     .unbind('click', _myFunction) 
     .bind('click', _myFunction); 
}; 

EDITような何かを例えば、jsfiddle

+0

努力をいただきありがとうございます!これは確かにトリックを行うだろう! – Milaan

+0

ur wellcome ...うれしかったよ(: – dugokontov

1

あなたは何ができますか?私は理解して

$('.target').testing(function(e){ 
    if (this.id === 'event'){ 
     alert('hello world'); 
    }else{ 
     alert('hello'); 
    } 
}); 
+0

これは本当に役に立ちますが、ユーザーはこれを指定する必要があります。関数内でこれを行う方法はありますか? – Milaan

+0

私はメインポストを編集しました。コードのビットを見てください。どうすれば今すぐ達成できますか?ところであなたの答えをありがとう、機能の中でこれを達成する方法がないなら、私はこれを使用します!ありがとう! – Milaan

+0

あなたはより詳細な例を提供できますか?そうでなければ、私たちはあなたが達成しようとしていることを正しく理解できません。多分jsfiddle.netの例を投稿してください –

0

限り、この

var $this. msg; 
$('.target').each(function(){ 
    $this = $(this); 

    if((#this.attr("id) != "#test") || ($this.find("#test").length == 0))//here check for all the possible ids you want){ 
     msg = "message" : "Hello world!"; 
    } 
    else{ 
     msg = "message" : "Hello!"; 
    } 
    $this.testing(msg); 
}); 
+0

実際には動作しますが、私はそれが関数自体の中で起こることを望みます。これは単純な例ですが、さらに進歩した場合は、次のようなものを使用する必要があります: '$( 'target')filter(" not :(#test#test1#test2#test3#test4#test5 #test6#test7#test8#test9#test10 etc) ")。テスト("メッセージ ":"こんにちは! '私はメインのポストを編集しました。コードのビットを見てください。今どのように達成するでしょうか?あなたの答えはbtwありがとう! – Milaan

+0

私の編集した答えを確認してください。 – ShankarSangoli

+0

本当に助けてくれるでしょうが、 'id'が' $(this) 'の子であれば、それはできません。申し訳ありませんが、私は本当に正確な質問ではありませんでした。しかし、私はすでにそれを驚いた。あなたの助けてくれてありがとう! – Milaan

0

を試してみてください。たとえば、あなたが要素をターゲットに付加し、ターゲット上でポップアップを持っており、今のポップアップがターゲットに子供がいる、またはあなたが持っている可能性もあり他に実装されています私のポイントは、関数への呼び出しが行われるたびにポップアップがDOMに挿入されているかどうかをチェックすることです。最初の場合は、そのポップアップを削除し、新しいメッセージで新しいメッセージを挿入します。

私が好きなわけ...ここ

function() { 
     //if a pop is present 
     $('.popup').remove(); 

     var msg = $(this).attr('title'); //for example 
     var popup = "html containin msg..."; 
     $(this).append(popup); 
    } 
+0

助けてくれてありがとう!しかし私はすでにそれを持っています。しかし助けてくれてありがとう – Milaan

0

これが正しい方法であるかどうかわかりませんが、私はそれを自分自身で驚かせました。それはあなた自身の機能の冒頭に$(this).unbind()を追加するだけで非常に簡単でした。以前に追加されたすべての機能が削除され、引き続き現在の機能が追加されます。私は前にそれを試してみましたが、余分なセレクタ:$(this).unbind(".testing")、それは何らかの理由で動作しませんでしたが、今は動作しています。

あなたのお返事ありがとうございました!心から感謝する!

関連する問題