有没有办法检测jQuery的click()是否点击了一个元素?

时间:2014-02-05 03:41:24

标签: javascript jquery bots

我不太确定这是否可行,但无论如何都要实现这一目标?我希望从脚本中获得一些基本保护,这些脚本会自动在我的按钮上注册点击事件,例如:麻烦的机器人。

我想只允许点击鼠标,而不是javascript本身触发的点击。

任何想法或其他防范方法?

6 个答案:

答案 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>