我知道问题似乎很容易,但事实并非如此。
请允许我详细说明
任务 使用动态提供的元素绑定动态提供的事件,以引发动态提供的事件。
我知道上面的任务看起来很混乱。所以为了做到这一点,我写了一些代码,因为它似乎不起作用。任何建议都非常感谢。
非常感谢
我有3个变量
var elementId = 't'; /// the id of an element on which the binding is performed
var triggerOn = 'mouseout'; /// the event that is going to be bind
var triggerEvent = 'click'; /// the event that is going to be raised on the occurrence of the above event
///function that is binding the event with element
var triggeror = function (eleId, trgOn, TrgEve, isBind) {
/// if isbind is true then bind else unbind
if (isBind === true) {
$('#' + eleId).bind(trgOn, triggerFun); /// problem
}
else {
$('#' + eleId).unbind(trgOn, triggerFun); /// problem
}
var self = this;
/// the event that is fired with the binded event is occured
function triggerFun() {
$('#' + self.eleId).trigger(self.TrgEve); ///trigger the another event
}
};
/// fired when the document is ready
$(document).ready(function () {
/// on text box click show an alert and un bind the trigeror
$("#t").bind('click', function () {
/// showing alert
alert();
/// unbinding
triggeror(elementId, triggerOn, triggerEvent, false);
});
/// bind the mouseout to click on textbox
triggeror(elementId, triggerOn, triggerEvent, true);
});
问题 事件没有被提升
答案 0 :(得分:1)
固定
https://plnkr.co/edit/6JQpvPkcRtw0qw2J2amv?p=preview
//triggeror(elementId, triggerOn, triggerEvent, false);
有一些问题,如:
首次点击后取消绑定
绑定,重新绑定,重新绑定。
绑定时,您正在调用该函数而不是链接到它
$('#' + eleId).bind(trgOn,triggerFun(eleId, TrgEve));
更改为
$('#' + eleId).bind(trgOn,function(){ triggerFun(eleId, TrgEve) });
退房并告诉我们
答案 1 :(得分:1)
你的plunkr中的问题是你的绑定事件中的函数会被立即调用。
尝试在类似的函数中添加它们: -
var triggeror = function (eleId, trgOn, TrgEve, isBind) {
/// if isbind is true then bind else unbind
if (isBind === true) {
$('#' + eleId).bind(trgOn, function(){
triggerFun(eleId, TrgEve);
});
}
else {
$('#' + eleId).unbind(trgOn);
}
};
注意:强>
<强> .bind()强>
从jQuery 1.7开始,.on()方法是首选方法 将事件处理程序附加到文档。