似乎我无法正确理解jQuery触发器('click')功能.
有人可以告诉我为什么这个简单的代码不起作用以及如何解决?
HTML:
Don't click me! Click me!
jQuery的:
jQuery('#foo').on('click', function(){ jQuery('#bar').trigger('click'); });
演示:FIDDLE
我想要的是能够点击#foo(运行良好)并模拟#bar上的点击(完全忽略,没有任何错误消息).也试过jQuery(document).ready(function(){...})
但没有成功.
jQuery .trigger('click');
只会导致一个事件在此事件上触发,它也不会触发默认的浏览器操作。
您可以使用以下JavaScript模拟相同的功能:
jQuery('#foo').on('click', function(){ var bar = jQuery('#bar'); var href = bar.attr('href'); if(bar.attr("target") === "_blank") { window.open(href); }else{ window.location = href; } });
你只需要在这样做之前放一个小的超时事件.click()
:
setTimeout(function(){ $('#btn').click()}, 100);
您需要使用jQuery('#bar')[0].click();
鼠标单击实际DOM元素(而不是jQuery对象),而不是使用.trigger()
jQuery方法.
注意:DOM Level 2 .click()
不适用于Safari中的某些元素.您需要使用变通方法.
http://api.jquery.com/click/
这是JQuery的行为.我不确定为什么它以这种方式工作,它只触发链接上的onClick功能.
尝试:
jQuery(document).ready(function() { jQuery('#foo').on('click', function() { jQuery('#bar')[0].click(); }); });
可能有用:
调用触发器的代码应该在调用事件之后进行.
例如,我有一些代码,我希望在#expense_tickets值更改时执行,并且当页面重新加载时
$(function() { $("#expense_tickets").change(function() { // code that I want to be executed when #expense_tickets value is changed, and also, when page is reload }); // now we trigger the change event $("#expense_tickets").trigger("change"); })
看我的演示:http://jsfiddle.net/8AVau/1/
jQuery(document).ready(function(){ jQuery('#foo').on('click', function(){ jQuery('#bar').simulateClick('click'); }); }); jQuery.fn.simulateClick = function() { return this.each(function() { if('createEvent' in document) { var doc = this.ownerDocument, evt = doc.createEvent('MouseEvents'); evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); this.dispatchEvent(evt); } else { this.click(); // IE Boss! } }); }