我在一个应用程序中使用jQuery,该应用程序通过.click()绑定注册用户点击以执行给定操作,并且我希望此功能仅通过用户mousedown 可用。我的一位朋友今天指出,可以从Firebug中的javascript终端(或类似的东西)运行$(element).click(),并实现与点击元素相同的功能 - 我想要的东西防止。关于如何做到这一点的任何想法?感谢您的投入。
答案 0 :(得分:10)
简答:不,你无法真正阻止它。
答案很长:像click event
这样的任何事件都绑定到这样的名为Event handlers
的事件。这些处理程序是functions
,它们在给定事件发生时执行。因此,如果您单击某个元素,浏览器会检查是否有任何event handlers
绑定到它,如果是,fires
它们。如果没有,浏览器会尝试将bubble up
事件发送到parent elements
,再次检查是否有任何event handlers
绑定到此类事件......等等。
jQuerys
.trigger()
方法(例如,如果调用.click()
,您实际调用的方法)就是做同样的事情。对于特定事件,它会调用绑定到特定元素的event handlers
。
修改强>
可能有一些简单的方法可以让某些soft detect
真正的点击,例如,您可能会检查toElement
中的event object
属性。 triggered
时未设置该属性。但话说回来,你可以轻易地假装.trigger()
。例如:
$(document).ready(function() {
$('#invalid2').bind('click', function(e){
alert('click\nevent.target: ' + e.toElement.id);
console.log(e);
});
$('#invalid1').bind('click', function(){
$('#invalid2').trigger({
type: 'click',
toElement: {id: 'Fake'}
});
});
});
工作示例:http://www.jsfiddle.net/v4wkv/1/
如果您只是致电$('#invalid2').trigger('click')
,则toElement
属性不会出现,因此会失败。但正如您所看到的,您可以在event object
中添加任何内容。
答案 1 :(得分:1)
你想阻止什么?有人搞乱你的客户端脚本?你可以做一些事情,比如模糊你的代码,但除此之外没什么。但即使这样做也只是让我觉得比它的价值更麻烦。
如果您不希望人们执行某些操作,请将功能移至服务器。
很抱歉收到坏消息。
答案 2 :(得分:1)
你无法对它做任何反对,也可以编写完整的函数然后解它。
但为什么这是一个问题呢?如果某人正在改变客户方面的东西,那只会影响他。或者您正在尝试检查一些数据?这必须始终在后端完成,因为你永远无法确定真正发送给它的是什么。
答案 3 :(得分:0)
您可以检查事件对象(作为第一个参数传递给处理程序)originalEvent。 如果事件是通过.click()
模拟的,那么它将是未定义的但它完全没用。你不能使用javascript来保证安全 - 客户端可以完全控制它(而firebug控制台只是最明显的工具)。客户端安全检查应仅提示用户并防止错误,恶意输入只能在服务器端停止。