检测用户点击vs. jquery .click()
detecting user click vs. jquery .click()
所以我在一个页面上有一些<a href="..
标签,它们有一个内联的onclick
属性。如果用户点击其中一个而没有登录,则会提示他们登录,然后在页面刷新时,jquery会在<a>
元素上触发.click()
,将用户带到他们原来想要去的地方。
因为弹出窗口拦截器的问题,我做了它,如果jquery触发一个.click()
我打开链接在同一窗口。
但是如果用户已经登录,我想点击链接打开一个新的选项卡。这是我在Chrome中工作良好的代码,但FireFox对它很生气-说'event is undefined'。
<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;
}
}
我尝试通过this
和e
,并尝试使用event
在firefox中没有运气,我正在检查事件。X,因为如果用户用鼠标点击链接,它将有一个值。
当然事件是未定义的…传递给函数的最后一个参数是事件,由函数定义中的变量e
引用。
function genericActionComplete(actionId, ctl, url, markComplete, e)
但是在HTML中传递e
作为参数不会传递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的作用域扫描将event
解析为window.event
-这适用于IE和chrome,而不是FF。
您应该可以在所有主要浏览器中使用,但是如果您想要安全起见,请在检查e.x
:
e = e || window.event || {x: null};
如何使用不引人注目的javascript ?请参阅突兀和非突兀javascript之间的区别以及为什么在HTML中使用onClick()是一种不好的做法?
然后你甚至可以"敢于"做其他干净的事情。
不确定你如何在香草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)
- jQuery:.click(function(){(element),collapse('show',f
- 具有相同类的jquery-click元素
- angularjs-bindng-click从jquery动态加载DOM
- jquery on click事件来显示内容
- jQuery.on-click事件不会发生
- 追加Jquery后的Binding Click事件不起作用
- 使用Jquery.click显示/隐藏切换,适用于新用户,但不适用于种子
- iframe中的jquery-click元素
- 响应式表设计:使用JQuery使click()展开tr
- Jquery:输入类型=“”;按钮“;使用.click()函数在Internet Explorer和Safari中不起作
- 一旦用jquery更改了类,按钮就没有响应click
- jQuery-click函数不适用于使用innerHTML动态生成的按钮
- .click() 使用 document.getElementById,但不使用 jquery selector
- addEventListener 在 Javascript 中不起作用,但 jQuery Click 正在工作
- jQuery if url hash, click event/activate javascript
- Using $(this).find with .click() jQuery
- double action in one click jquery
- 如何将click jquery函数与此代码一起使用
- localstorage on button click [Jquery]
- Collapse slideToggle on Click jQuery