我正在将应用切换到RequireJS。
在我的应用中,我会检测用户何时点击具有某个类的元素。
我使用click事件和this.id来获取元素的唯一ID。
既然我已经将此功能移动到了需要的模块,我只能得到“未定义的”#39;回到这个。
我猜测模块在调用函数时没有对所点击内容的引用。
我似乎也无法将this.id传递给模块。
'使用关键字作为标识符无效'。
那么,如何获取点击元素的唯一ID?
$(document).on('click', '.userSelect', function (myID) {
var retConvo = getConvoID.convoData();
convoID = retConvo.convo;
isGroup = retConvo.group;
console.log("Conversation ID is: " + convoID + " and IsGroup: " + isGroup);
});
这是它正在调用的模块代码。
define(function() {
return {
convoData: function(myID) {
var userSelected = this.id;
console.log('User Selected ID is: ' + userSelected);
if (userSelected == myID) {
alert("You can't message yourself.");
return false;
} else {
console.log("Selected User ID is: " + this.id);
// change background to show user is selected.
$("div.userSelected").removeClass("userSelected");
$(this).addClass("userSelected");
convoID = this.id;
isGroup = 'N';
console.log("emitting convo users id: " + convoID);
return {
convo: convoID,
group: isGroup
};
}
}
}
});
所以,当它到达上面的this.id时,它是未定义的。当它在一个js文件中时工作得很好。
感谢您的帮助和指示。
答案 0 :(得分:2)
有几件事:
myID
传递给convoData
函数this
指的是本地this
。如果你想要它引用被点击的元素,要么将元素作为参数传递给函数,要么在函数调用时绑定它:var retConvo = getConvoID.convoData(myId).bind(this);
或者,var retConvo = getConvoID.convoData(myId, this);
然后将convoData
更改为function(myID, element)
并参阅element.id
; ===
代替==
- 与此问题无关,但可以帮助您避免出现问题。