Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JqueryUI自己的小部件:实例覆盖值(有时)_Javascript_Jquery_Jquery Ui_Jquery Ui Widget Factory - Fatal编程技术网

Javascript JqueryUI自己的小部件:实例覆盖值(有时)

Javascript JqueryUI自己的小部件:实例覆盖值(有时),javascript,jquery,jquery-ui,jquery-ui-widget-factory,Javascript,Jquery,Jquery Ui,Jquery Ui Widget Factory,我写了一个小测试来描述我的问题: <div id="test1"></div> <div id="test2"></div> <script> (function ($) { $.widget("mseh.testIt", { options : { foo : false, bar : false }

我写了一个小测试来描述我的问题:

<div id="test1"></div>
<div id="test2"></div>
<script>
    (function ($) {
        $.widget("mseh.testIt", {
            options : {
                foo : false,
                bar : false
            },

            _settedOptions : {
                foo : false,
                bar : false
            },

            readOptions : function() {
                return this._settedOptions;
            },

            _init : function() {
                this._initializeTest();
            },

            _initializeTest : function() {
                var self = this;
                $.each(self.options, function(key, value) {
                    self._settedOptions[key] = value;
                });
            }
        });
    })(jQuery);

    $('#test1').testIt({ foo : true, bar : false});
    $('#test2').testIt({ foo : true, bar : true});

    console.log($('#test1').testIt('readOptions'));
    console.log($('#test2').testIt('readOptions'));

</script>

(函数($){
$.widget(“mseh.testIt”{
选项:{
傅:错,
酒吧:错
},
_设置选项:{
傅:错,
酒吧:错
},
readOptions:function(){
返回此项。\u设置选项;
},
_init:function(){
这个._initializeTest();
},
_initializeTest:函数(){
var self=这个;
$.each(self.options、函数(键、值){
self._settedOptions[键]=值;
});
}
});
})(jQuery);
$('#test1').testIt({foo:true,bar:false});
$('#test2').testIt({foo:true,bar:true});
log($('test1').testIt('readOptions');
log($('#test2').testIt('readOptions'));
在本例中,两个日志都为'foo'提供了true(如预期的那样),为'bar'提供了true(并非如预期的那样)

这是一个错误还是我做错了什么

使用jQuery 1.7.2和1.9.1进行测试。 使用jQueryUI 1.9.2和1.10.0进行测试


谢谢

,因为在每个测试实例中都共享了设置选项

如果检查test1和test2之间的_settodoptions对象相等性,如下所示, 它们指的是同一个对象

console.log( $('#test1').testIt('readOptions') === $('#test2').testIt('readOptions') );
如果要将其视为实例变量,请编写以下内容

(function ($) {
    $.widget("mseh.testIt", {
        options : {
            foo : false,
            bar : false
        },

        // This field will be shared in every instance.
        // _settedOptions : {
        //     foo : false,
        //     bar : false
        // },

        readOptions : function() {
            return this._settedOptions;
        },

        _init : function() {
            // like this!!!!!
            this._settedOptions = {
                foo : false,
                bar : false
            };

            this._initializeTest();
        },

        _initializeTest : function() {
            var self = this;
            $.each(self.options, function(key, value) {
                self._settedOptions[key] = value;
            });
        }
    });
})(jQuery);