Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 Jquery引用此_Javascript_Jquery_Object - Fatal编程技术网

Javascript Jquery引用此

Javascript Jquery引用此,javascript,jquery,object,Javascript,Jquery,Object,鉴于目标: // A data set $.DataArea = function () { // Default options $.extend(this, { class: 'DataSet', data: new Array(), container: null }); // Add a bar to this object this.addBar = function(startDate, en

鉴于目标:

// A data set
$.DataArea = function () {

    // Default options
    $.extend(this, {
        class: 'DataSet',
        data: new Array(),
        container: null
    });

    // Add a bar to this object
    this.addBar = function(startDate, endDate, label) {    
        var insertPos = this.data.length;
        this.data[insertPos] = new $.DataBar();
        this.data[insertPos].startDate = startDate;
        this.data[insertPos].endDate = endDate;
        this.data[insertPos].label = label;

        this.container.children('.jobArea').append('<div class="bar-wrapper"><div class="bar">' + label + '</div></div>');   



    }

    // Bind the bar to a div
    this.bind = function(docID) {
        this.container = $('#' + docID);   
        this.container.append('<div class="jobArea"></div>')     
    };

    this.init = function() {

        this.container.children('.jobArea .bar, .jobArea .marker').each(function(i) {
            $(i).bind("selectstart", _preventDefault);
        });

    };

};

传递给
.each()
回调的第二个变量是实际元素。您应该能够这样重新编写:

this.container.children('.jobArea .bar, .jobArea .marker').each(function(i,e) {
    $(e).bind("selectstart", _preventDefault);
});
编辑

我认为还值得一提的是,并非所有浏览器都支持
selectstart
事件,这可能是问题所在。

回到使用
this
而不是
I
,并使用该方法而不是该方法


这是必要的,因为
.bar
.marker
不是
容器

的直接后代,如果您像这样调用
数据区域
函数:
$.DataArea()
,然后该函数中的这个将是全局的
jQuery
函数,因此您的
extend
项和
init
函数将作为属性添加到jQuery函数实例中。我想这不是你真正想要的。您能显示正在使用的
DataArea
吗?你是不是想创建一个插件?@patrick谢谢你的关注,我所做的一切似乎都不能让它正常工作,而且它没有抛出任何错误,我已经编辑了答案,让你看到它在使用中。我不确定这是真的,@patrick。.each函数应该将“this”作用域赋给正在迭代的元素,而不管调用作用域中的“this”是什么。@Matt:是的,但我刚才说的是
$.DataArea
本身的调用上下文。在最初的问题中,没有迹象表明正在使用
new
,因此像
$.DataArea()
这样的调用将使
数据区
函数中的
这个
引用
jQuery
函数实例
this.container.children('.jobArea .bar, .jobArea .marker').each(function(i,e) {
    $(e).bind("selectstart", _preventDefault);
});
this.init = function() {

      //------------v
    this.container.find('.jobArea .bar, .jobArea .marker').each(function(i) {
        $(this).bind("selectstart", _preventDefault);
    });

};