2009-03-15 7 views
2

ajaxリソースを呼び出すときによくhref='#'のリンクを使用します。jQueryの.click()イベントを使用しているときにIEで可聴 'クリック' <a href='#'/>

私は、IEがこれらのリンクをクリックしたときに「クリック」されることに気付きました。

は、ここでの回避策だただし

$("#element") 

.click(function(){return false;}) 

.bind("click", function(){ alert(this); }); 

、私はjQueryプラグインでこの機能をカプセル化しようとすると、私は成功した要素を「クリック」戻っていませんよ。

たとえば、上記の方法を使用すると、クリックされた実際のA要素が取得されます。

しかし、私はこのようなプラグインを書いた場合:

(function($){ 
    $.fn.clickless = function(fnCallback) { 

     return this 
      .click(function(){return false;}) 
      .bind("click", function(){ 
       fnCallback.call(); 
      }); 

    } 
})(jQuery); 

をそして

$("#element").clickless(function(){ 
alert(this); 
}); 

を呼び出して、私は私が見つけようとしている時には役立ちませんWindowオブジェクトを取得します実際のAタグ

多分私はプラグインを間違って書いています - アイディアですか?

(function($){ 
    $.fn.clickless = function(fnCallback) { 

     $.each(this, function() { 

     var element = $(this); 

     element.click(function(){return false;}) 
       .bind("click", function(){ 
        fnCallback(); 
       }); 
    }); 

    return this; 

    } 
})(jQuery); 

答えて

2

は、最後にそれが働いてしまった -

//jQuery.clickless.js 

(function($){  
    $.fn.clickless = function(fnCallback) {   
     return this 
       .click(function(){return false;})     
       .bind("click", function(){       
        fnCallback.apply(this);     
       });  
      }} 
)(jQuery); 

編集:

をおかげでcobbalと(ダルマイニシアティブの)ジュリアンに行く - 感謝。

+0

Arf、コールバックで "this"を使用しているかもしれないという事実をどうやって見逃すことができましたか?あなたはこれを解決してうれしい:) –

1

これを試してみてください開始/終了ナビゲーションのサウンド。

私は個人的にはこれらのクリックノイズが嫌いですので、Windowsインストールではまずオフにしてください。

+0

ダイス - 同じ問題。 – marclar

+0

私はこれが愚かに聞こえるかもしれませんが、あなたのリンクが "要素"に設定されていることを確信していますか、それともhrefですか? hrefの場合は、セレクタとして「a [href = '#element']」を使用するか、「a [href^= '#']」を使用して問題のリンクをすべて取得します。 –

+0

はい - 各リンクには「hlList_43」などの一意のIDがあります。 。 。私はそのコードの汎用IDとして "要素"を使用していました。 – marclar

-4

はまた、あなたがコントロールパネルに移動する方法についてのご利用者に助言する必要があります、サウンド、およびオフにしますので、多くの

おかげで、

マイケル

+0

...またはクリック音を出さないより良いブラウザを得る。しかし、残念ながら、これらの「回答」は実際に質問に答えていません。 [どのように]それはスクリプトを使用して無効にすることができますか? –

0

理由だけでは使用しない:

.bind("click", fnCallback); 

ことがthisが正しく設定されていますよう。

編集:このバージョンでは、実際に動作:apply()call()がどのように異なるかを見に

.bind("click", function(){ 
    fnCallback.apply(this); 
}); 

はそれが

詳細編集を使用したものを見つけるためにjQueryのeach()の内側の周りに突きこれはより正確な方法です。

.bind("click", function(){ 
    fnCallback.call(this); 
}); 
+0

試してみると、うまくいかないことがわかります。 – marclar

+0

本当に、今回は実際に試しました。 – cobbal

+0

そのコードでは、 "fnCallback"は存在しません。また、「クリック」ノイズは処理されません。しかしあなたが正しいです。.apply()関数は便利です。ありがとうございました。 – marclar

関連する問題

 関連する問題