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);
});
};