代码之家  ›  专栏  ›  技术社区  ›  scribu

模拟本机单击

  •  2
  • scribu  · 技术社区  · 15 年前

    我需要触发一个链接上的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');
    

    欢迎提出任何改进建议。

    附言: 是的,这只是一个常规链接的工作方式,除了你可以在两者之间做一些其他的处理。

    PPS: 不,只做$el.trigger('click');will 更改位置。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Mark Schultheiss    15 年前

    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>
    

    编辑1:@评论:

    如果您描述的“其他”返回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();
    
        2
  •  1
  •   ChaosPandion    15 年前

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

    $('a#my_special_link').trigger("click");
    
        3
  •  0
  •   David Hellsing    15 年前

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

    听起来像是正常链接的行为…?

    无论如何,如果您试图查找“return false”,则使用 isDefaultPrevented() ,只有在 preventDefault() 从同一事件对象调用在本例中,我将事件对象发送到 whatever() 如果这个函数设置 预防默认值() ,窗口仍将重新定位(这是您需要的…?)

    $('a#my_special_link').bind('click', function(e) {
      whatever(e);
      if (e.isDefaultPrevented()) {
        window.location = $(e.target).attr('href');
      }
    });
    
        4
  •  0
  •   mtyaka    15 年前

    如果我正确地理解了你的问题,你有一个 a 你无法控制的元素,它有一个 onclick 返回的属性 false 是的。返回 通过on click处理程序,可以防止对链接的单击将您带到链接页面你不想那样。

    你可以储存 onclick公司 处理程序函数,然后将其从链接元素中移除:

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

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

    $a.click(function() {
        // ...
        onclickHandler();
        // ...
    });
    
    推荐文章