jquery 正在复制onclick事件

dgiusagp  于 2022-12-18  发布在  jQuery
关注(0)|答案(3)|浏览(130)

我有一个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);
            }
        }
    });
};

我尝试了不同的方法来复制事件,但似乎无法使其工作:

  1. 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'));

wecizke3

wecizke31#

从jQuery 1.4开始,您可以使用.clone()it now has a .clone(true) overload来实现这一点。
这指示它复制数据和事件(事件保存在.data('events')中)。
链接创建过程如下所示:

var link = from.clone(true).css({
                'text-decoration': 'none',
                'display': 'block',
                'padding': '0px',
                'cursor': 'pointer',
                'color': $(this).css('color')
            });
mccptt67

mccptt672#

用于事件处理程序以继续元素上现有的。您不能使用
$('bla'). click...或任何类似的实现方法
相反,您必须使用以下方法之一:

$('bla').live('click', function(){...});

$("table").delegate("tr", "click", function(){
    .....
});

live和delegate区别在于delegate可以很容易地存在于链中。与live相反,delegate是一个新特性。
对于使用clone()函数的情况下的单个元素,你需要在clone中传递一个true参数来保留原始的事件处理器。这不是你这里的情况,但是知道它是有用的。

$('.bla').clone(true).appendTo('body or something');

pkwftd7m

pkwftd7m3#

你可以在复制后重新绑定事件。但是新的克隆要好得多。

相关问题