문제

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 사용자 스크립트에서 TheOBJ는 정의되지 않았습니다. 나는 랩퍼, unsafewindow 등과 함께 원숭이 사업이 진행되고 있다는 것을 알고 있습니다.

도움이 되었습니까?

해결책 2

나는 그것을 작동시키는 데 필요한 모든 것이 이것입니다.

$.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 코드에서 어디에 있는지 잘 모르겠습니다.이 래퍼와 함께 작동하지 않는 코드를 사용하고있었습니다 (조금 보였지만 너무 어렵지는 않습니다). 이것은 확실히 큰 보안 문제를 제시하기 때문에 이것을 중요한 것에 넣지 않을 것입니다.

다른 팁

데이터가 SelectBox의 모든 마지막 옵션에만 추가되었지만 페이지에서 첫 번째 선택된 옵션에 대해 검색 되었기 때문에 페이지의 첫 번째 선택 상자의 마지막 옵션이 선택되지 않는 한 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');
});

나는 그 질문을 잘 이해하지 못할 수도 있지만, 나는 답을 쐈다.

배열을 통해 반복 할 수 있으며 그렇게하면 해당 객체를 사용할 수 있습니다. 여기 예입니다

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

당신의 질문에 "목록"이 무엇인지 정확히 알기가 어렵습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top