0

私は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');
});

ただし、私のグリースモンキーユーザースクリプトでは、theObjは未定義です。ラッパーやunsafeWindowなどでサルのビジネスが行われていることは知っています。これが機能しない理由を誰かが知っていることを望んでいました。

4

3 に答える 3

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');
});
于 2009-01-12T21:54:36.250 に答える
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 コードのどこで、これらのラッパーで動作しないコードを使用していたのかわかりません (少し調べましたが、それほど難しくはありませんでした)。ただし、これは間違いなく大きなセキュリティ上の問題を引き起こすため、これを重要なことには入れません。

于 2009-01-15T03:23:09.300 に答える
0

I may not be understanding the question very well, but I'll give the answer a shot.

You can iterate through an array, and in doing so use that object. Here's an example

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);
});

Hard to know exactly what "list" is in your question.

于 2009-01-13T18:56:12.303 に答える