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