1

所以我<a href="..在页面上有一些标签,它们有一个内联onclick属性。如果用户点击了一个并且没有登录,他们将被提示登录,然后在页面上刷新 jquery 将触发.click()元素<a>将用户带到他们最初想去的地方。

由于弹出窗口阻止程序问题,如果 jquery 触发,.click()我会在同一窗口中打开链接。

但是,如果用户已经登录,我想单击链接以在新选项卡中打开。这是我在 Chrome 中运行良好的代码,但 FireFox 对此很生气 - 说“事件未定义”。

 <a href="#" onclick="genericActionComplete('12345', this, 'http://www.myurl.com', false, e)


function genericActionComplete(actionId, ctl, url, markComplete, e) {
    if(event.x != null){   // User Clicked - open url in new tab  
         window.open(url);
    }

    else{    // Click performed by script after logIn , open in same tab to prevent Pop-Up Blocker

     window.location = url;   
    }
}

我尝试通过thise尝试event在 firefox 中使用但没有运气,我正在检查 event.x 因为如果用户用鼠标单击链接,它将有一个值。

4

2 回答 2

1

当然事件是未定义的......传递给函数的最后一个参数是事件,由e函数定义中的变量引用。

function genericActionComplete(actionId, ctl, url, markComplete, e)

但是将eHTML 作为参数传递不会传递event对象,它被称为event. 改变

<a href="#" onclick="genericActionComplete('12345', this, 'http://www.myurl.com', false, e)">
<!-- ===================================================================================/\

<a href="#" onclick="genericActionComplete('12345', this, 'http://www.myurl.com', false, event)">
<!-- ===================================================================================/\

你应该没事。您的代码在 chrome 上运行的原因很简单。为了尽可能兼容和宽容,chrome 确实有一个window.event属性,就像旧的 IE 一样。由于您的函数的第一行是错误的:

if(event.x != null){//should be e.x

JavaScript 的范围扫描解析eventwindow.event- 在 IE 和 chrome 中有效,在 FF 中无效。
您应该可以使用那里的所有主要浏览器,但如果您想安全起见,请在检查之前将此行添加到函数中e.x

e = e || window.event || {x: null};
于 2013-03-22T15:41:04.047 回答
0

使用不显眼的 javascript怎么样?请参阅突兀和不突兀的 javascript 之间的区别以及为什么在 HTML 中使用 onClick() 是一种不好的做法?

然后你甚至可以“敢”做其他干净的事情。

不知道你会如何在 vanilla javascript 中处理它,但下面是一个使用 jQuery 的解决方案。

查看 jsbin 上的实时示例http://jsbin.com/lidobarenaku/1/edit?html,js,console,output

HTML:

<a href="#" class="js-hook-for-link">your link</a>
<br><br>
<div class="programmatical-click-on-link">
If you click on this text, the link "your link" will be programmatically triggered.
</div>

不显眼的 javascript和 jQuery:

$('.js-hook-for-link').on('click', function(event, isProgrammaticalClick ){
  event.preventDefault() ; /* link behavior disabled for demo purpose */

  console.log("on click: "+(isProgrammaticalClick || "isHumanAction !" ));

  if ( isProgrammaticalClick ){ /* JS truthy/falsy value usage */
    /* .. do something on programmatical click ... */
    /* window.location = url;  open url in same tab in your case */
  }
  else {
    /* .. do something on human submission ... */
    /* window.open(url); open url in other tab in your case */
  }
});

$('.programmatical-click-on-link').on('click', function(){
  /* programmatically click on link (notice the flag param added) */
  $('.js-hook-for-link').trigger( 'click' , ['isProgrammaticalClick'] );
});

注意:我在本例中使用 jQuery 来“挂钩”类名,但没有什么能阻止您使用纯 javascript 或其他 javascript 选择器库(即http://sizzlejs.com/https://github.com /ded/qwery和更多http://jster.net/category/selector-libraries )

于 2014-09-05T12:47:04.967 回答