【问题标题】:"setting a property that has only a getter"- javascript error with firefox“设置一个只有 getter 的属性”- Firefox 的 javascript 错误
【发布时间】:2009-08-08 20:13:06
【问题描述】:

直到最近,我一直在使用 Safari 4 来测试和调试我当前的 jQuery 插件。我在 Firefox 中尝试了我的代码,它开始抱怨 JQuery-Framework 中的某些内容:“设置一个只有 getter 的属性”。 我试图找出哪一行导致 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 看起来像这样:

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

【问题讨论】:

  • 猜猜人们早上更聪明......喝了一杯浓咖啡并深呼吸后,我就是这种情况。 redsquare 对这个问题当然是完全正确的,我得到了类似的解决方案:我刚刚添加了:case 'tagName': break;为了避免这个问题,firefox爱我。

标签: javascript jquery jquery-plugins


【解决方案1】:

看起来你试图用这一行设置元素的 tagName

$elm.attr(_name, _val); 

这当然是不可能的,因为它是只读的。

【讨论】:

  • ..但在 safari 中似乎是可能的,你会说 Firefox 有解决方法吗?
  • safari 可能只是吞下了异常。您始终可以将其包装在 try catch 中,但为什么没有另一个不设置 tagName 的 tagName 的 case 语句,因为您已经创建了适当的元素。
  • 为什么不只删除第一个 each 并将其中的条件移动为 case 语句。但是,您必须确保 tagName 是数组中的第一项。我可能会看看你的对象的结构,但是为了避免这种可能性
  • 是的,这就是为什么我在每个循环中都先添加这个,我想在对象表示法中保持灵活性
  • 无论如何。标记它:) 因为它回答了问题。
【解决方案2】:
case 'tagName': break;

...是解决方案,但为了感谢redsquare的提示,我标记了他。

【讨论】:

    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2019-02-24
    • 2011-06-04
    • 2021-05-31
    • 2021-04-04
    • 2022-07-27
    相关资源
    最近更新 更多