嗨,我有一个有趣的问题
是否可以复制像这样的元素的onclick事件
$('#ElementId').attr('OldOnClick',$('#ElementId').attr('OnClick'));
如果有任何办法,请指导我。
我正在尝试禁用表单上存在的所有元素的点击事件,在某些其他点上我必须恢复它们,所以我试图用其他属性名称保存onclick
答案 0 :(得分:4)
是的,您可以访问处理函数。在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"
答案 1 :(得分:3)
我已经编写了用于复制事件的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);
答案 2 :(得分:0)
听起来你可能会错过下面的第二行。你正在复制时想要做一个动作。
$('#ElementId').attr('oldonclick', $('#ElementId').attr('onclick') )
.removeAttr('onclick');
答案 3 :(得分:0)
以下将删除元素数据中的“onclick”存储,并允许您稍后从数据中使用它。使用A
标记的示例
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”中的内容,则需要将属性值视为字符串并使用正则表达式方法进行修改。
<a href="#" onclick="alert('foo')"> Link 1</a>
var onclick=$(selector).attr('onclick').replace('foo', 'bar')
答案 4 :(得分:0)
显然您不应该再这样做了,
无论如何,这都是您可以做到的(感谢this answer):
searchTitle
然后,如ChuckE的答案所示:
var handlerFunction = jQuery._data( $('#ElementId').get(0), "events" ).click[0].handler;
不要告诉任何人...