我在greasemonkey用户脚本中使用jquery。我正在尝试添加一组基于数组的选项,并使用jquery.data将相应的对象粘贴到元素中:
$.each(some_array, function(item){
// These next 2 statements seem awkward to me and I was also hoping
// a jquery master could show me a slicker way to perhaps
// combine them into something simpler
$('select').append('<option>dummy</option>');
$('select option:last-child').data('obj', item);
});
然后我想让对象退出选择:
$('select').change(function(){
var theObj = $('option:selected', this).data('obj');
});
但是在我的greasemonkey用户脚本中,未定义了.bb。我知道有一些猴子业务正在进行包装,不安全的窗口等等。我只是希望有人可能知道究竟是什么让它无效。
答案 0 :(得分:1)
theObj应该是未定义的,因为数据仅添加到任何选择框上的所有最后选项,但是已针对页面上的第一个选定选项进行检索。
就像样式指南一样,你应该考虑更多地使用“this”。例如
$('select').change(function(){
var theObj = $('select option:selected').data('obj');
});
应该是:
$('select').change(function(){
var theObj = $('option:selected',this).data('obj');
});
或
$('select').change(function(){
var theObj = $(this).find('option:selected').data('obj');
});
答案 1 :(得分:1)
我发现我需要让它发挥作用的是:
$.each(some_array, function(item){
$('select').append('<option>dummy</option>');
$('select option:last-child').each(function(index, elem){
$(elem.wrappedJSObject).data('obj', item);
});
});
$('select').change(function(){
var theObj = $('option:selected', this.wrappedJSObject).data('obj');
});
这一切都与XPCNativeWrappers有关。我不确定jquery代码中的哪个地方使用的代码不适用于这些包装器(我看起来有点但不太难)。这绝对是一个很大的安全问题,所以我不会把它放到任何重要的东西。
答案 2 :(得分:0)
我可能不太了解这个问题,但我会给出答案。
您可以遍历数组,并在此过程中使用该对象。这是一个例子
var array_items = [0,1,2,3,4,5];
$.each(array_items, function(item) {
$('select').append('<option>dummy</option>');
$('select option:last-child').data('obj', item);
});
很难确切地知道你的问题中的“列表”。