1
我試圖用jQuery的data()函數來存儲和檢索元素上的數據。我想要檢索存儲在textarea中的數據,只要用戶輸入空格鍵。然而,每次我這樣做,我從data()
得到undefined
。GreaseMonkey中的jQuery數據()函數
現在,如果我在HTML中定義完全相同的Javascript ,它的工作方式與預期的相同。是否有一些「疑難雜症」到data()
,使它無法在GreaseMonkey中工作?
這裏是的GreaseMonkey腳本:
(function(){
//boilerplate greasemonkey to wait until jQuery is defined...
function GM_wait()
{
if(typeof unsafeWindow.jQuery == 'undefined') {
window.setTimeout(GM_wait,100);
} else {
var $ = unsafeWindow.jQuery;
$(function() { letsJQuery($); });
}
}
GM_wait();
function letsJQuery($)
{
//store the data initially
$('textarea[name=comment]').data('tst', 'abc');
//retrieve the data on spacebar
$('textarea[name=comment]').live('keypress', function(e) {
if(e.which == 0x20) { //spacebar
alert("the stored data is: " + $(this).data('tst'));
return false;
}
});
}
})();
這裏是我的非常簡單的測試HTML文件:
<html>
<head>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</head>
<body>
<textarea name="comment"></textarea>
</body>
</html>
這是我的問題的一個非常簡化的版本,當然。
我很好奇:你能描述一下爲什麼這個代碼工作,並提交者的代碼不?他們看起來像他們應該做同樣的事情。 –
在傳遞給live方法的函數內部,隱式變量顯然不能正確地運行jQuery數據方法(至少在Greasemonkey中)。有更多的調查要做,以確定爲什麼。一種可行的解決方案(至少在OP中給出的代碼示例)是使用來自一個變量的數據方法,該變量不在此函數內部基於此設置。我在這裏展示的是在方法之外的範圍。您也可以在函數內部設置ta var - 正好在警報線上方工作。 – micahwittman