模拟本机点击

时间:2009-11-23 22:06:03

标签: jquery javascript-events

我需要在链接上触发click事件,然后,如果没有任何侦听器阻止默认值,则更改位置。

这是我到目前为止所得到的:

var $el = $('a#my_special_link');
var onClick = $el.attr('onclick');

// Hack to capture the event object
var ev_reference;
var ev_capture = function(ev) { ev_reference = ev; }
$el.bind('click', ev_capture);

// Don't leave out the onClick handler
if ( typeof onClick == 'function' )
    $el.bind('click', onClick);

$el.trigger('click');

// Clean up
$el.unbind('click', ev_capture);
if ( typeof onClick == 'function' )
    $el.unbind('click', onClick);

// Redirect if necessary
if ( ! ev_reference.isDefaultPrevented() )
  window.location = $el.attr('href');

欢迎任何改进建议。

PS:是的,它只是常规链接的工作方式,除了您可以在其间进行其他处理。

PPS:不,只需要执行$ el.trigger('click');将更改位置。

4 个答案:

答案 0 :(得分:4)

enter code here将我的笔记提取到其他帖子:(另一种说法相同的基本内容)

      <a href="somewhere" id="mylink">MyLink</a> 
        <script>jQuery('#mylink').click(function(){
            // do whatever I want here, then redirect
             window.location.href = "http://stackoverflow.com";
        });
        function doClick(){
            jQuery('#mylink').trigger('click'); 
        };
        // trigger the redirect now
        doClick();
        </script>

EDIT1:@ comments:

如果您描述的“其他”返回false,那么您在此时使用false终止回调 - 因此您是正确的但与此处理程序无关。哪一次点击首先执行,而另一次点击永远不会返回,如果它首先执行,则会在另一个点击日志之前重定向。

为了登录,你把它放在我的

 "// do whatever I want here, then redirect"

评论 要删除其他事件,请仅与此绑定:

   <a href="somewhere" id="mylink">MyLink</a> 
        <script>jQuery('#mylink').unbind('click').bind('click', function(){
            // do whatever I want here, then redirect
             window.location.href = "http://stackoverflow.com";
        });
        function doClick(){
            jQuery('#mylink').trigger('click'); 
        };
        // trigger the redirect now
        doClick();

答案 1 :(得分:1)

http://docs.jquery.com/Events/trigger#eventdata

$('a#my_special_link').trigger("click");

答案 2 :(得分:0)

  

“如果没有听众阻止了   默认情况下,更改位置。“

听起来正常链接的行为方式......?

无论如何,如果您正在尝试查找“return false”,则使用isDefaultPrevented()将无法找到它,只有在从同一事件对象调用preventDefault()时才会返回true。在这个例子中,我将事件对象发送到whatever(),如果该函数设置preventDefault(),那么窗口将重新定位(这是你需要的......?)

$('a#my_special_link').bind('click', function(e) {
  whatever(e);
  if (e.isDefaultPrevented()) {
    window.location = $(e.target).attr('href');
  }
});

答案 3 :(得分:0)

如果我正确理解了您的问题,那么您将拥有一个您无法控制的a元素,该元素具有返回onclick的{​​{1}}属性。从onclick处理程序返回false可防止点击该链接将您带到链接页面。你不希望这样。

您可以存储false处理函数,然后将其从link元素中删除:

onclick

然后在自定义单击处理程序中调用存储的处理函数:

var $a = $('#my_special_link'); 
var onclickHandler = $a.attr('onclick');
$a.removeAttr('onclick');