2012-01-03 8 views
1

現在の選択を処理する<span>ノードにイベントハンドラをアタッチしますが、クリックイベントが発生する前に、ブラウザ(Chrome 16.0.912.63)によって選択がクリアされたかのように表示されます。どのようにして、onclickイベント処理の前に選択をクリアできないのですか?

私はこれを少し難解なやり方で、onmousedownにハンドラを付けることで回避できますが、そうする必要はありません。ここで

は(jQueryのが必要です)問題を示して簡単なHTMLの例です:

<span class="paste">PASTE</span> 
<textarea id="selected"></textarea> 

<script type="text/javascript"> 
    $('.paste').click(function(e) { 
     var txt = window.getSelection(); // works only in Chrome, Safari, FF 
     $('#selected').val(txt); 
     e.stopPropagation(); 
    }); 
</script> 

希望behivorは、私は、マウスを使用して、いくつかのテキストを選択することができるよということで、その単語「PASTE」をクリックしてください選択された領域の内容をテキストエリアに挿入する。クリックハンドラが起動する前に選択がクリアされたように見えます。代わりにspan要素の

<a class="paste" href="#">PASTE</a> 

、または私はれるonmousedown結合するが、私は要素をコントロールしていないので、私はちょうど<a>の代わりを使用できない場合:私が使用している場合、このコードは正常に動作しますa <span>

答えて

0

迅速かつ汚いソリューションはwrap()使用することです -

$('span.paste').wrap('<a class="paste" />'); 

をして(あなたが述べたように)あなたが得たなら、あなたは

+0

ええ、この動作をアタッチしようとしている要素には、私が使用できるセレクタがありません。 (そして、私は本当にすべてのページの読み込み時にこのようにjQuery経由で自分のDOMをmuckingしたくない) – slacy

0

作品<a>タグにあなたのclickイベントを添付しようとすることができますここのgoogleから、これはおそらくあなたが望むものです:onclickの代わりにonmousedownを処理します。それはポストに書かれていますが、私のような怠惰な読者なら、あなたはそれを見逃して逃しました。

関連する問題