jquery 复制元素的Onclick事件

ej83mcc0  于 2024-01-07  发布在  jQuery
关注(0)|答案(6)|浏览(150)

大家好,我有一个有趣的问题
可以复制这样元素的onclick事件吗

$('#ElementId').attr('OldOnClick',$('#ElementId').attr('OnClick'));

字符串
如果有什么方法可以做到这一点,请指导我。
我试图禁用所有元素的点击事件目前在表单上的某些点和其他一些点我必须恢复他们,所以我试图保存他们的onclick与其他属性名称

xzv2uavs

xzv2uavs1#

是的,你可以访问handler函数。在jquery中这样做:

$('#specialbutton').click(function(){ console.log("peaches");};

var handlerFunction = $('#specialbutton').data("events").click[0].handler;

$('#specialbutton').click(); // "peaches"
handlerFunction(); // "peaches"

字符串
然后将其分配给另一个元素,如下所示:

$('#otherelement').click(handlerFunction);
$('#otherelement').click(); // "peaches"

vbkedwbf

vbkedwbf2#

我写了一个jQuery插件来复制事件。虽然,它只适用于动态添加的事件,但不适用于那些添加了“on”函数的事件。
我希望这将帮助某人。
主要参数:
eventType -“click”、“mouseover”等。
destination -jQuery对象、dom元素或选择器
clearCurrent -如果为true,将清除目标上的当前处理程序-默认为false

(function($){
            $.fn.copyEventTo = function(eventType, destination, clearCurrent) {
            var events = [];
            this.each(function(){
                var allEvents = jQuery._data(this, "events");
                if (typeof allEvents === "object") {
                    var thoseEvents = allEvents[eventType];
                    if (typeof thoseEvents === "object") {
                        for (var i = 0; i<thoseEvents.length; i++){
                            events.push(allEvents[eventType][i].handler);
                        }           
                    }
                }
            });
            if (typeof destination === "string") {
                destination = $(destination);
            } else if (typeof destination === "object") {
                if (typeof destination.tagName === "string") {
                    destination = $(destination);
                }
            }
            if (clearCurrent === true) destination.off(eventType);
            destination.each(function(){
                for(var i = 0; i<events.length; i++) {
                    destination.bind(eventType, events[i]); 
                }
            });
            return this;
        }
    })(jQuery);

字符串

smdnsysy

smdnsysy3#

这里另一种方式:

//sw Get Element
var button = document.getElementById("mybutton");
//sw Get Click Function
var clickFunction = jQuery._data(button, "events").click[0].handler;
//sw Test Click Function
clickFunction();
//sw Copy ClickFunction to another Element
$('#anotherButton').click(clickFunction);

字符串
注意:前面的代码,适用于:

$("#mybutton").click(function() {
    //sw TODO HERE
});

nxowjjhe

nxowjjhe4#

很明显你不能再这么做了,
这就是你可以做的方式(感谢this answer):

var handlerFunction = jQuery._data( $('#ElementId').get(0), "events" ).click[0].handler;

字符串
然后,就像ChuckE的回答一样:

$('#otherelement').click(handlerFunction);
$('#otherelement').click();

w1e3prcc

w1e3prcc5#

听起来你可能漏掉了下面的第二行。你应该在复制的时候做一个动作。

$('#ElementId').attr('oldonclick', $('#ElementId').attr('onclick') )
               .removeAttr('onclick');

字符串

6g8kf2rb

6g8kf2rb6#

下面将删除元素数据中的“onclick”存储,并允许您稍后从数据中使用它。
DEMO http://jsfiddle.net/u4eVW/1/

/* remove "onclick" and store */
$('a').each(function() {
    var onclick = $(this).attr('onclick')
    $(this).data('oldClick', onclick)
    $(this).removeAttr('onclick')

})

/* initialize handlers from data */
$('a').click(function() {
        eval($(this).data('oldClick'))
 })

字符串
如果你想在单独的“onclick”中改变一些东西,你需要把属性值当作一个字符串,并使用regex方法来修改。

<a href="#" onclick="alert('foo')"> Link 1</a>

var onclick=$(selector).attr('onclick').replace('foo', 'bar')

相关问题