2009-08-08 22 views
5

Cho đến gần đây, tôi đã sử dụng Safari 4 để thử nghiệm và gỡ lỗi Plugin jQuery hiện tại của mình. Tôi đã thử mã của tôi trong Firefox và nó bắt đầu phàn nàn về một cái gì đó trong khung công tác JQuery: "thiết lập một thuộc tính chỉ có một getter". tôi đã cố gắng để tìm ra các dòng gây Firefox để phàn nàn và thấy rằng điều này xảy ra ở đâu đó ở đây **"thiết lập thuộc tính chỉ có bộ thu gọn" - lỗi javascript với firefox

$.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 trông như thế này:

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

đoán ppl thông minh hơn vào buổi sáng ... có thể đó là trường hợp của tôi sau khi uống một ly cà phê mạnh và hít một hơi thật sâu. redsquare hoàn toàn đúng về vấn đề của khóa học và tôi nhận được giải pháp tương tự: tôi vừa thêm: case 'tagName': break; để tránh sự cố này và firefox yêu tôi vì điều đó. –

Trả lời

7

Dường như bạn đang cố gắng để thiết lập tagName của một phần tử có dòng này

$elm.attr(_name, _val); 

Điều này tất nhiên là không thể vì nó chỉ đọc.

+0

.. nhưng nó dường như có thể trong safari bạn sẽ nói có một workaround cho firefox? –

+0

safari có lẽ chỉ nuốt ngoại lệ. Bạn luôn luôn có thể quấn nó trong một thử bắt nhưng tại sao không có một tuyên bố trường hợp cho tagName mà không đặt tagName kể từ khi bạn đã tạo ra các yếu tố thích hợp. – redsquare

+0

lý do tại sao không chỉ xóa từng cái đầu tiên và di chuyển điều kiện bạn có bên trong nó thành báo cáo trường hợp. Bạn sẽ phải đảm bảo rằng tagName là mục đầu tiên trong mảng. Tôi có lẽ sẽ nhìn vào cấu trúc của đối tượng của bạn tuy nhiên để tránh khả năng này – redsquare

3
case 'tagName': break; 

... là giải pháp, nhưng để cảm ơn redsquare cho gợi ý tôi đánh dấu anh ta lên.

Các vấn đề liên quan