2012-01-03 101 views
1

我想將事件處理程序附加到處理當前選擇的<span>節點,但在點擊事件觸發之前,它看起來好像瀏覽器清除了選擇(Chrome 16.0.912.63)。如何防止在onclick事件處理之前清除選擇?

我可以通過在onmousedown上附加一個處理程序,以稍微凌亂的方式解決這個問題,但我寧願不必這樣做。

這裏是一個說明該問題的簡單的HTML示例(需要的jQuery):

<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的是,我能夠選擇使用鼠標的一些文字,然後點擊單詞「粘貼」將選定區域的內容插入到textarea中。看起來好像該選擇在點擊處理程序觸發之前被清除。此代碼工作得很好,如果我使用:

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

代替span元素,或者如果我綁定onmousedown事件,但我不是在元素上的控制,所以我不能只用一個<a>代替一個<span>

回答

0

的快速和骯髒的解決方案是使用wrap() -

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

,然後你可以嘗試在click事件附加到一個<a>標籤,其工作(如你所提到的)

+0

是的,但我試圖附加此行爲的元素沒有一個不錯的選擇器,我可以使用。 (我並不想通過像這樣每次頁面加載的jQuery來使用我的DOM) – slacy 2012-01-03 20:52:02

0

如果你有這裏從谷歌這可能是你想要的:處理onmousedown而不是onclick。這是寫在後,但如果你是一個懶惰的讀者像我一樣,你撇了撇,並錯過了它。