我正在尝试使用看起来像这样的ubonstrustive dom,
var app = {
common : {
init: function() {
//Initialisate the request object
app.request.init();
}
},
request: {
users : "helloworld",
init: function() {
alert("...request started...");
$('form').on('change', '#workbase', this.workBaseChange);
},
workBaseChange: function(e) {
var that = this;
console.log(this);
}
},
validation : {}
}
UTIL = {
fire : function(func, funcname, args) {
var namespace = app;
funcname = (funcname === undefined) ? 'init' : funcname;
if(func !== '' && namespace[func] && typeof namespace[func][funcname] == 'function') {
namespace[func][funcname](args);
}
},
loadEvents: function() {
UTIL.fire('common');
$.each(document.body.className.split(/\s+/), function(i, classnm){
UTIL.fire(classnm);
});
}
};
$(document).ready(UTIL.loadEvents);
request.workBaseChange在更改选择菜单时触发,但如果该函数中的log this
返回更改的select
而不是我期望的请求对象,我是否做错了什么?如何获取请求{}的上下文?
答案 0 :(得分:0)
尝试
$('form').on('change', '#workbase', this.workBaseChange.bind(this));
您可以在此处找到更多信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
注意如果使用IE,则仅在IE9或更高版本中支持。然而,上面的链接上有一个polyfill。
this.workBaseChange是提供给jquery事件的回调。在回调中,'这个' value设置为触发事件的元素,即select。 bind函数返回一个新函数,其值为' this'限定为该功能,然后设置'这个'属性为您提供的值。
另见jquery docs(Context,Call and Apply):
http://api.jquery.com/Types/#Function
在JavaScript中,变量" this"总是指当前 上下文。默认情况下,"这个"指的是窗口对象。在一个 函数此上下文可以更改,具体取决于函数的方式 调用。
使用handle元素调用jQuery中的所有事件处理程序 背景。
在此处查看此工作:https://jsfiddle.net/mzxrhz8t/