我有一个jQuery函数,基本上使整个表行都可点击,但复制一个链接并将链接复制到行中的每个子单元格中。在我的项目中,一些链接可能有onclick
JavaScript事件,所以我需要我的函数也能够复制这些事件,但我在这样做时遇到了麻烦。
以下是我当前的函数:
jQuery.fn.linker = function(selector) {
$(this).each(function() {
var from = $(selector, this);
if (from.length > 0) {
var href = from.attr('href');
if (href) {
var link = $('<a href="' + $(selector, this).attr('href') + '"></a>').css({
'text-decoration': 'none',
'display': 'block',
'padding': '0px',
'cursor': 'pointer',
'color': $(this).css('color')
});
$(this).children()
//.css('padding', '0')
.wrapInner(link);
}
}
});
};
我尝试了不同的方法来复制事件,但似乎无法使其工作:
from[0].events
始终未定义:
if (from.size() && from[0].events && link.size()) {
var events = from[0].events;
link.each(function() {
for (var type in events) {
for (var handler in events[type]) {
jQuery.event.add(this, type, events[type][handler], events[type][handler].data);
}
}
});
}
1.这一个看起来执行的不错,但是点击复制的链接没有任何作用
link.attr('onclick',from.attr('onclick'));
型
3条答案
按热度按时间wecizke31#
从jQuery 1.4开始,您可以使用
.clone()
it now has a.clone(true)
overload来实现这一点。这指示它复制数据和事件(事件保存在
.data('events')
中)。链接创建过程如下所示:
mccptt672#
用于事件处理程序以继续元素上现有的。您不能使用
$('bla'). click...或任何类似的实现方法
相反,您必须使用以下方法之一:
或
live和delegate区别在于delegate可以很容易地存在于链中。与live相反,delegate是一个新特性。
对于使用clone()函数的情况下的单个元素,你需要在clone中传递一个true参数来保留原始的事件处理器。这不是你这里的情况,但是知道它是有用的。
型
pkwftd7m3#
你可以在复制后重新绑定事件。但是新的克隆要好得多。