Domanda

Sto usando jquery in uno script utente di greasemonkey. Sto cercando di aggiungere un sacco di opzioni a una selezione basata su un array e anche incollare l'oggetto corrispondente nell'elemento con jquery.data in questo modo:

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

Quindi vorrei riportare l'oggetto in selezione:

$('select').change(function(){
   var theObj = $('option:selected', this).data('obj');
});

Tuttavia, nel mio script utente greasemonkey, l'Obj non è definito. So che ci sono affari di scimmie con involucri, finestre non sicure ecc. Speravo solo che qualcuno potesse sapere cosa non fa funzionare esattamente.

È stato utile?

Soluzione 2

Ho scoperto che tutto ciò di cui avevo bisogno per farlo funzionare era questo:

$.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');
});

Tutto ha a che fare con XPCNativeWrappers . Non sono sicuro di dove nel codice jquery stesse usando il codice che non funzionerà con questi wrapper (ho guardato un po 'ma non troppo difficile). Questo, tuttavia, presenta sicuramente un grosso problema di sicurezza, quindi non lo metterei in qualcosa di importante.

Altri suggerimenti

theObj dovrebbe essere indefinito a meno che non sia selezionata l'ultima opzione della prima casella di selezione sulla pagina, poiché i dati sono stati aggiunti solo a tutte le ultime opzioni su qualsiasi casella di selezione, ma sono stati recuperati per la prima opzione selezionata sulla pagina.

Proprio come una guida di stile, dovresti prendere in considerazione l'utilizzo di " questo " Di Più. per esempio.

$('select').change(function(){
   var theObj = $('select option:selected').data('obj');
});

dovrebbe essere:

$('select').change(function(){
   var theObj = $('option:selected',this).data('obj');
});

o

$('select').change(function(){
   var theObj = $(this).find('option:selected').data('obj');
});

Potrei non capire molto bene la domanda, ma darò una risposta alla risposta.

Puoi iterare attraverso un array e, nel farlo, usa quell'oggetto. Ecco un esempio

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

Difficile sapere esattamente cosa " list " è nella tua domanda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top