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 Jquery回调函数-“;这";_Javascript_Jquery_Jquery Ui_Callback - Fatal编程技术网

Javascript Jquery回调函数-“;这";

Javascript Jquery回调函数-“;这";,javascript,jquery,jquery-ui,callback,Javascript,Jquery,Jquery Ui,Callback,我这里有一个jquery(UI)应用程序,整个jquery代码都有点混乱,所以我开始思考如何以一种更奇特的方式构造它。。。我在某个地方读到一篇博客文章,其中提到“oop”——用java的方式,可以通过以下方式实现: function RangeSelector(product_id) { this.product_id = product_id; this.start_point = "#from_" + product_id; this.end_point = "#to

我这里有一个jquery(UI)应用程序,整个jquery代码都有点混乱,所以我开始思考如何以一种更奇特的方式构造它。。。我在某个地方读到一篇博客文章,其中提到“oop”——用java的方式,可以通过以下方式实现:

function RangeSelector(product_id) {
    this.product_id = product_id;
    this.start_point = "#from_" + product_id;
    this.end_point = "#to_" + product_id;
}
RangeSelector.prototype.myFunction = function() { }
整个代码都可以找到

我的范围选择器“Class”应该包含两个jqueryui,它们负责让用户为可以租赁产品的商店选择日期时间范围

我现在遇到的问题是:日期时间选择器得到回调函数(“unavailableFrom”、“unavailableTo”),我想在这里做一些特定的事情,然后调用一个通用的“unavailable”函数。 错误消息是:

TypeError: 'undefined' is not a function (evaluating 'this.unavailable(date)')
我用firebug查看了一下,似乎“这”不是我的RangeSelector对象,而是datetimepicker工作的HTML元素。 我的问题是:如何访问此方法“不可用”


顺便说一句,我在这里告诉你整个故事,因为我不认为我在这里选择的结构是正确的。如果您有多个具有共同含义的html元素,并且希望对它们进行聚合,那么如何处理这类事情呢?

如果您需要将
this
设置为不同的值,可以使用。(或在启用ES5的环境中,您可以使用新函数。)
代理接受用于
的函数和值,并返回一个函数,该函数将调用原始函数,并将
设置为该值

例如,假设您有
范围选择器
,并且希望
单击
在特定实例上触发
myFunction

var r = new RangeSelector(/* ...args...*/);
$("some_selector").click($.proxy(r.myFunction, r));
现在,当调用
r.myFunction
时,在调用中,
将是对
r
对象的引用。(如果需要知道单击了哪个DOM元素,请让
myFunction
接受jQuery传递的
event
参数,并使用
event.target

为完整起见,使用
Function#bind
(如果浏览器支持ES5功能,或者您包含了ES5垫片[因为
Function#bind
可以垫片填充]:

更多信息(在我的博客上):


jqueryui
datepicker
onSelect
有点麻烦,因为它们没有给你
事件
对象,所以你没有访问
事件.目标
的权限。您最好的选择可能是一个传递元素的闭包:

var r = new RangeSelector(/* ...args...*/);
$("some_selector")..datepicker({
    onSelect: function(dateText, inst) {
        return r.myFunction(dateText, inst, this);
    }
});
…其中
myFunction
接受
dateText
inst
元素
参数

|

这是因为我们分配给
onSelect
的函数是包含
r
变量的环境的闭包


闭包经常被误解;FWIW,另一篇博文:

关键字
这个
正在改变你的范围,所以它在不同的地方并不意味着你所期望的一样。我建议您在函数中显式地传递您正在使用的元素,并直接引用该元素,而不是尝试通过
this

来区分范围如果我很了解您,您需要将方法绑定到上下文,这在javascript中不是实例,但是函数被调用的上下文。这就是为什么javascript如此困难的原因,因为它使用的关键字与通常给出的定义无关,因此您可以创建一个函数绑定:function _bind(_function,_context){return function(){return _function.apply(_context,arguments);}​thx,这非常有效,直到我意识到,在另一个函数“onSelect”中,我需要访问范围选择器对象以及实际的datepicker html元素对象-您能给我一个这样的小例子吗?“(如果需要知道单击了哪个DOM元素,请让myFunction接受jQuery传递的事件参数,并使用event.target。)?@MarioDavid:Ah,jQuery UI的datepicker
onSelect
很痛苦。更新了。好吧,这可能是我已经考虑过的替代方案,但我不清楚,在执行类似这样的操作时,如何将任何类型的对象传递到回调方法:“beforeShowDay:this.unavailableFrom”-只是:“beforeShowDay:this.unavailableFrom”(myVar)“?
var r = new RangeSelector(/* ...args...*/);
$("some_selector")..datepicker({
    onSelect: function(dateText, inst) {
        return r.myFunction(dateText, inst, this);
    }
});