我的JavaScript中有一个计时器,需要模拟点击一个链接,一旦时间流逝就转到另一个页面.要做到这一点,我正在使用jQuery的click()功能.我已经使用$().trigger()和window.location也,我可以作出打算与所有三个它的工作.
我观察到一些奇怪的行为,click()我试图了解发生了什么以及为什么.
我正在使用Firefox来解决这个问题,但我也对其他浏览器会对此做些什么感兴趣.
如果我没有使用$('a').bind('click',fn)或$('a').click(fn)设置事件处理程序,那么调用$('a').click()似乎什么都不做.它不会为此事件调用浏览器的默认处理程序,因为浏览器不会加载新页面.
但是,如果我首先设置一个事件处理程序,那么即使事件处理程序什么都不做,它也会按预期工作.
$('a').click(function(){return true;}).click();
Run Code Online (Sandbox Code Playgroud)
这会加载新页面,就像我自己点击了一样.
所以我的问题是双重的:这种奇怪的行为是因为我在某处做错了吗?click()如果我没有创建自己的处理程序,为什么调用对默认行为不起作用?
编辑:
当霍夫曼确定他试图复制我的结果时,我上面描述的结果实际上并没有发生.我不确定是什么原因引起了我昨天观察到的事件,但我今天肯定这不是我在问题中所描述的.
所以答案是你不能在浏览器中"伪造"点击并且所有jQuery都会调用你的事件处理程序.您仍然可以使用window.location更改页面,这对我来说很好.
我有一个LinkButton,我需要执行单击以导致回发.实际的链接目标是:
javascript:__doPostBack('ctl00$c1$btnRefreshGrid','');
单击该链接会执行回发,由代码隐藏中的断点验证.粘贴javascript:__doPostBack('ctl00$c1$btnRefreshGrid','')在浏览器的地址栏中也可以起到同样的效果.
我尝试了以下但完全没有效果:
__doPostBack('ctl00$c1$btnRefreshGrid','');
$('#ctl00$c1$btnRefreshGrid').click();
$('#ctl00$c1$btnRefreshGrid').trigger('click');
eval($('#ctl00$c1$btnRefreshGrid').attr("href"));
Run Code Online (Sandbox Code Playgroud)
我同时使用尝试<%= btnRefreshGrid.UniqueID %>和<%= btnRefreshGrid.ClientID %>产生的选择.
jquery ×2
asp.net ×1
click ×1
dopostback ×1
events ×1
firefox ×1
javascript ×1
linkbutton ×1
postback ×1