Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有一种方法可以检测jQuery';是否单击了某个元素;单击()?_Javascript_Jquery_Bots - Fatal编程技术网

Javascript 是否有一种方法可以检测jQuery';是否单击了某个元素;单击()?

Javascript 是否有一种方法可以检测jQuery';是否单击了某个元素;单击()?,javascript,jquery,bots,Javascript,Jquery,Bots,我不太确定这是否可行,但是否有可能实现这一点?我想从脚本中获得一些基本的保护,这些脚本将自动注册我按钮上的点击事件,例如:讨厌的机器人 我只想允许鼠标点击,而不是javascript本身触发的点击 有什么想法或其他方法可以防止这种情况发生吗?这个 $('#id').on('click', function(){ console.log('clicked'); }); 我不确定我是否100%理解你的问题。如果单击它,显然会记录一些内容。你在寻找防止这种情况发生的方法吗?注意:注意,这是多么简

我不太确定这是否可行,但是否有可能实现这一点?我想从脚本中获得一些基本的保护,这些脚本将自动注册我按钮上的点击事件,例如:讨厌的机器人

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

有什么想法或其他方法可以防止这种情况发生吗?

这个

$('#id').on('click', function(){
  console.log('clicked');
});

我不确定我是否100%理解你的问题。如果单击它,显然会记录一些内容。你在寻找防止这种情况发生的方法吗?

注意:注意,这是多么简单

当用户触发click事件时,会设置一个originalEvent属性,所以我想您可以检查它

$('div').click(function(e){
    console.log(e, this, e.originalEvent)
    if(e.originalEvent){
        console.log('user clicked')
    }
}).click();

演示:

您想确定单击事件是通过元素单击还是通过任何js代码触发的,对吗

在这种情况下,您可以使用“单击”事件返回的“事件”对象

你可以用

event.hasOwnProperty('originalEvent')

如果事件是通过单击目标元素触发的,则上述语句返回true,否则返回false

实现这一点的一种可能方法是使用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 -->
下载:

var _gaq=_gaq | |[]; _gaq.push([''u setAccount','YOUR COOL GA ID']); _gaq.push([''u trackPageview']); _gaq.push([''u trackEvent','Downloads','JPG','/Downloads/img/“+x+”]); $(函数(){ $('.downloadsall a')。在(“单击”,函数()上){ var theHREF=$(this.attr('href'), myGAQ=|gaq | |[]; myGAQ.push([''u trackPageview',theHREF]); myGAQ.push([''u trackEvent','Downloads','JPG',theHREF]); }); });
您可以在按钮上注册mouseDown事件处理程序,并且仅处理
事件。如果
事件发生,则单击()
事件。单击()
事件发生在鼠标下移后的特定时间内(例如,一秒钟)

函数now(){
return(新日期()).getTime();
}
$(“#我的按钮”)。在(“鼠标向下点击”上,函数(e){
var self=$(这是);
如果(e.type==“鼠标向下”){
self.data(“mousedownTime”,now());
}否则{
var mouseTime=self.data(“mousedownTime”);
if(mouseTime&&now()-mouseTime<1000){
//点击这里处理这个问题
}
}
});
这可以转化为一个jQuery插件方法,可以很容易地为您实现这一点

jQuery.fn.realClick = function(fn) {
    this.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 real click here
                return fn(e);
            }
        }
    });
}

$("#myButton").realClick(function(e) {
    // your click processing code here
    // only gets called if a click event was
    // preceded by a mousedown event within 1 second
});
jQuery.fn.realClick=函数(fn){
此.on(“鼠标向下点击”,函数(e){
var self=$(这是);
如果(e.type==“鼠标向下”){
self.data(“mousedownTime”,now());
}否则{
var mouseTime=self.data(“mousedownTime”);
if(mouseTime&&now()-mouseTime<1000){
//点击这里处理真正的问题
返回fn(e);
}
}
});
}
$(“#myButton”).realClick(函数(e){
//您的点击处理代码在这里
//仅当单击事件发生时调用
//在1秒内发生鼠标向下事件之前
});
您可以使用

事件接口的isTrusted只读属性是一个布尔值,当事件由用户操作生成时为true,当事件由脚本创建或修改或通过EventTarget.dispatchEvent()调度时为false

例如:

document.getElementById(“单击我”).addEventListener(“单击”,函数(e){
如果(如有锈蚀){
log(“这个点击是真实的”);
}否则{
log(“此单击不是真实的”);
}
});
document.getElementById(“测试”).addEventListener(“单击”),函数(e){
document.getElementById(“单击我”).click()
});
点击我

单击以模拟单击另一个按钮
请更好地解释您搜索的确切结果我的意思是明确告诉您是否仅使用jQuery.Click()单击了某个元素。我想知道它是否被用户用鼠标点击。我可能应该更好地解释这一点。那么关于的代码就可以做到这一点。每当用户单击具有该id的元素时,It控制台都会记录“clicked”。jQuery尽其所能使
。click()
函数尽可能将其作为自然事件(源:)。因此,可能很难区分它。但是,您可以重写脚本中的
.click
()`方法。@TylerMcGinnis:这不是关于获得单击通知,而是关于区分“自然/真实”单击和自动单击。@JohannesH。知道了。那肯定不是我的答案。感谢您的澄清。@Justin-使用
dispatchEvent()
模拟的单击可以具有originalEvent属性,即使它不是真正的鼠标单击。请参阅JSFIDLE以获取演示(在Chrome中):。因此,这种方法的效果取决于外部代理如何模拟单击。
jQuery.fn.realClick = function(fn) {
    this.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 real click here
                return fn(e);
            }
        }
    });
}

$("#myButton").realClick(function(e) {
    // your click processing code here
    // only gets called if a click event was
    // preceded by a mousedown event within 1 second
});