gpt4 book ai didi

javascript - jQuery事件触发器+构造器模式

转载 作者:行者123 更新时间:2023-11-30 17:30:15 26 4
gpt4 key购买 nike

我用“new”创建一个对象,初始化它并用 $(this).trigger({type:"myevent", field1:val1}) 订阅它的事件,比如 (< strong> here - jsfiddle ),并且有效:

var Users = function (selector) {
var that = this;
var myButton;

//function to trigger
function add(name) {
console.log("before trigger for: $('"+selector+"') with ["+name+"]")

$(that).trigger({
type: "user-added",
name: name,
date: new Date(),
});
}

$(selector).click(function () {
add($("#name").val());
});
};

我的问题是我有兴趣在单独的函数 init ( another jsfiddle ) 中传递 selector:

        var Users = function () {
var that = this;

var mySelector;

//function to trigger
function add(name) {

console.log("before trigger for: $('" + mySelector + "') with [" + name + "]")

$(that).trigger({
type: "user-added",
name: name,
date: new Date(),
});
}

function init(selector) {
mySelector = selector;
$(selector).click(function () {
add($("#name").val());
});
}

return {
init: init
};
};

在这种情况下,代码被破坏了:

当事件被触发时,函数看到的that对象看起来像 用户{}

并没有像工作示例中那样更新:用户{jQuery11111210404012482791554801678404482030027643403015099466:对象}

所以 jQuery 不会触发该事件。

当然,我可以在 init() 中设置 that,或者在构造函数中初始化对象来解决问题,但是这让我很抓狂,为什么 "如果我在构造函数中设置它并在内部函数中连接到事件,那么“”成员不会连接到实际对象,但如果我在同一函数中连接到事件,它就会工作。

谢谢。

最佳答案

        return {
init: init
};

你不应该从被调用的构造函数中返回任何东西with new . this object你的 that 指的是 一个空的 User 实例,而不是你返回的带有 init 函数的普通对象,分配给 u1 并安装处理程序。

而不是返回那个对象字面量,你应该这样做

         this.init = init;

关于javascript - jQuery事件触发器+构造器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23250397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com