jquery 模拟本机点击

bf1o4zei  于 2022-12-26  发布在  jQuery
关注(0)|答案(4)|浏览(120)

我需要触发链接上的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');将 * 不会 * 更改位置。

qco9c6ql

qco9c6ql1#

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"

comment要删除另一个事件,然后只与此事件绑定:

<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();
jtoj6r0c

jtoj6r0c2#

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

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

wribegjk3#

如果没有侦听器阻止默认值,请更改位置。
听起来就像一个正常的链接行为...?
无论如何,如果你试图寻找“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');
  }
});
vh0rcniy

vh0rcniy4#

如果我没理解错你的问题,你有一个你无法控制的a元素,它有一个onclick属性返回false,从onclick处理程序返回false会阻止你点击链接到链接页面,你不希望这样。
您可以存储onclick处理程序函数,然后将其从link元素中删除:

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

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

$a.click(function() {
    // ...
    onclickHandler();
    // ...
});

相关问题