我不太确定这是否可行,但无论如何都要实现这一目标?我希望从脚本中获得一些基本保护,这些脚本会自动在我的按钮上注册点击事件,例如:麻烦的机器人。
我想只允许点击鼠标,而不是javascript本身触发的点击。
任何想法或其他防范方法?
答案 0 :(得分:6)
您想要确定click事件是通过元素点击还是通过任何js代码触发的,对吗?
在这种情况下,您可以使用“click”事件返回的“event”对象
您可以使用
event.hasOwnProperty('originalEvent')
如果通过单击target element触发事件,则上面的语句返回true,否则返回false
答案 1 :(得分:3)
注意:请注意这是多么万无一失。
当用户触发click事件时会有一个originalEvent属性,所以你可以检查一下我认为
$('div').click(function(e){
console.log(e, this, e.originalEvent)
if(e.originalEvent){
console.log('user clicked')
}
}).click();
演示:Fiddle
答案 2 :(得分:3)
您可以在按钮上注册mouseDown事件处理程序,只有在{0}}事件发生在mouseDown之后的某个时间内(例如一秒钟)时才处理.click()
事件。
.click()
这可以变成一个jQuery插件方法,可以很容易地为你做到这一点。
function now() {
return (new Date()).getTime();
}
$("#myButton").on("mousedown click", function(e) {
var self = $(this);
if (e.type === "mousedown") {
self.data("mousedownTime", now());
} else {
var mouseTime = self.data("mousedownTime");
if (mouseTime && now() - mouseTime < 1000) {
// process the click here
}
}
});
答案 3 :(得分:2)
实现此目标的一种可能方法是使用Google Analytics。像下面这样的东西可能会调整你的目标吗?
<p class="downloadsmall">download: <a href="jpg/LOW/1.jpg" onClick="_gaq.push(['_trackPageview', '/downloads/img/LowRes/1.jpg']);">Low Res</a></p>
<!-- GA track all onClicks -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'YOUR COOL GA ID']);
_gaq.push(['_trackPageview']);
_gaq.push(['_trackEvent', 'Downloads', 'JPG', '/downloads/img/"+x+"']);
$(function(){
$('.downloadsmall a').on("click", function(){
var theHREF = $(this).attr('href'),
myGAQ = _gaq || [];
myGAQ.push(['_trackPageview', theHREF]);
myGAQ.push(['_trackEvent', 'Downloads', 'JPG', theHREF]);
});
});
</script>
<!-- End GA track all onClicks -->
答案 4 :(得分:0)
此?
$('#id').on('click', function(){
console.log('clicked');
});
我不确定我是否100%理解你的问题。如果点击它,那显然会记录一些东西。您是否在寻找防止这种情况发生的方法?
答案 5 :(得分:0)
您可以使用Event.isTrusted。
Event接口的isTrusted只读属性是一个布尔值,当由用户操作生成事件时为true,而由脚本创建或修改事件或通过EventTarget.dispatchEvent()调度事件时为false。
示例:
document.getElementById("click-me").addEventListener("click", function(e) {
if (e.isTrusted) {
console.log("This click is real");
} else {
console.log("This click is not real");
}
});
document.getElementById("test").addEventListener("click", function(e) {
document.getElementById("click-me").click()
});
<button id="click-me">Click me</button>
<button id="test">Click to simulate click on the other button</button>