我無法解釋下面的代碼的行爲。這裏是我的整個腳本爲什麼這個簡單的javascript/jquery代碼不能提醒選中的文本?
<html>
<head>
<script type="text/javascript" language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript" language="javascript">
var tmpText = '';
$(document).ready(function(){
tmpText = '';
$('#btn_bold').click(function(){alert(tmpText);});
$('textarea').bind('mouseup', function(){
tmpText = '';
if(window.getSelection){
tmpText = window.getSelection();
}else if(document.getSelection){
tmpText = document.getSelection();
}else if(document.selection){
tmpText = document.selection.createRange().text;
}
//tmpText = 'hello world';
alert(tmpText);
});
});
</script>
</head>
<body>
<button type="button" id="btn_bold">click</button>
<textarea>This is some text</textarea>
</body>
</html>
請嘗試以下操作:
1)使用鼠標高光文字文本區域。你會注意到,JavaScript會提醒你選擇的文本。
2)按下單擊按鈕。你會注意到javascript會提醒你一個空字符串。
否取消註釋tmpText = 'hello world';
並重覆上述步驟。這一次,您會注意到步驟1)和2)會提醒您「hello world」。
在第一個實驗中,第2步怎麼會沒有提示您與第1步相同的文本?
我在谷歌瀏覽器
隨後:在添加.toString()之前,我複製了代碼並添加了一個帶有setInterval事件的,該事件每500ms調用一次'$(「#in」).val(tmpText) ,只要在TEXTAREA中有選擇,就會顯示正確的tmpText,但一旦模糊就會被清除。 tmpText var引用*選擇對象*,當TEXTAREA失去其選擇時,該對象被更新爲零長度值。 – 2011-05-29 22:02:33
確切地說,這也將解釋單擊按鈕時的空值,因爲選擇將在該點被刪除。 – Niklas 2011-05-29 22:07:54
雖然這是真的,但它不是基本問題,這是textarea選擇在大多數瀏覽器中的工作方式不同(使用textarea的'selectionStart'和'selectionEnd'屬性)。 – 2011-05-30 10:03:43