2009-08-08 7 views
5

최근까지 저는 현재 jQuery 플러그인 테스트 및 디버깅을 위해 Safari 4를 사용하고있었습니다. Firefox에서 코드를 시험해 보았는데 JQuery 프레임 워크에서 "getter 만있는 속성 설정"에 대해 불평하기 시작했습니다. 나는 불평 파이어 폭스를 일으키는 라인을 찾아 노력이 여기 어딘가에 발생 **"getter 만있는 속성 설정"- firefox의 javascript 오류

$.fn.util.create_$dom = function(opt) { 
    var $dom = {}; 
    $.each(opt.dom,function(name,val){ 
     console.log(name); 
     var $elm = $('<div>'); 
     $.each(opt.dom[name],function(_name,_val){ 
      if(_name == 'tagName') $elm = $('<'+_val+'/>'); 
     }); 
        console.log(name+': ok'); 
     $.each(opt.dom[name],function(_name,_val){    **here  
      switch(_name){          **here 
       case 'className': $elm.addClass(_val);   **here 
       default: $elm.attr(_name, _val);    **here 
      }             **here 
     }); 
     $dom[name] = $elm; 
     console.log(name+': ok'); 
    }); 
    return $dom; 
}; 

options.dom이 보이는 것을 발견 : 당신이 설정하려고처럼

dom:{ 
     wrapper:{className:'wrapper'}, 
     inner:{tagName:'p',className:'test',test:'bla'} 
    }, 
+0

추측 ppl은 아침에 더 똑똑합니다 ... 나는 강한 커피를 마시고 깊은 숨을들이 쉬고 나서 저와 함께있었습니다. redsquare는 물론 문제에 대해 완전히 옳았습니다. 비슷한 해결책이 있습니다. 방금 ​​추가 한 내용 : case 'tagName': break; 이 문제를 피하려면 파이어 폭스가 나를 좋아합니다. –

답변

7

같습니다 이 줄이있는 요소의 tagName

$elm.attr(_name, _val); 

물론 이것은 읽기 전용이므로 불가능합니다.

+0

..하지만 파이어 폭스에 대한 해결 방법이 있다고 사파리에서 가능할 것 같았습니까? –

+0

사파리는 아마 예외를 삼킨 것입니다. try catch에서는 항상 래핑 할 수 있지만 tagName에 대한 또 다른 case 문은 tagName을 설정하지 않은 이유는 적절한 요소를 이미 만들었 기 때문입니다. – redsquare

+0

왜 첫 번째 코드를 삭제하고 그 안에있는 조건을 case 문으로 옮기는 것이 어떨까요? 그러나 tagName이 배열의 첫 번째 항목인지 확인해야합니다. 나는 어쩌면 개체의 구조를보고이 가능성을 피할 수 있습니다. – redsquare

3
case 'tagName': break; 

... 해결책이지만, 힌트를 위해 redsquare에게 감사의 말을 전합니다.

관련 문제