Javascript 如何使用一些自定义函数包装单击事件
我有一个名为“创建项目”的按钮,当用户单击该按钮时,我希望发生两件事Javascript 如何使用一些自定义函数包装单击事件,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我有一个名为“创建项目”的按钮,当用户单击该按钮时,我希望发生两件事 一个ajax调用,用于检查是否允许用户创建项目 如果允许,则正常执行按钮,如果不允许,则弹出一个模式对话框,说明不允许创建新项目 我有以下代码 $('.create_project').click(function(e) { e.stopDefault(); $.getJSON('/check_user_limit', function(data){ if(data.allow_to_create_
$('.create_project').click(function(e) {
e.stopDefault();
$.getJSON('/check_user_limit', function(data){
if(data.allow_to_create_project){
//trigger the click here
}else{
//modal here
}
}
});
在上面的代码中使用“trigger”将不起作用,因为它将成为一个无限循环。取消绑定第一次起作用,但第二次不起作用,因为foo不再绑定到函数 我不知道你为什么不想这样做:
$('.foo').click(function(e) {
$(this).href = "/bar";
});
很简单,您只需执行以下操作:
$('.foo').click(function(e) {
$(this).href = "/bar"; # done something else before the click
return true;
});
如果您想截获click事件而不是传播它,那么只需返回false即可。我注意到您使示例更加明确,但解决方案仍然有些相似。我们没有返回true来传播事件,而是手动触发click,同时告诉click函数通过返回false吞下事件。然后,代码将如下所示:
$('.create_project').click(function(e) {
$.getJSON('/check_user_limit', function(data) {
if (data.allow_to_create_project) {
e.click();
} else {
//modal here
}
}
return false;
});
然而,发出AJAX请求以验证某个特性是否可用通常不是一个好主意。如果服务器已经知道用户无法创建项目,那么为什么首先要单击按钮?用适当的状态更新控件。我有点困惑。您提到解除绑定,但实际代码中没有实际的事件解除绑定 如果您只是试图执行某个元素的代码预单击,那么您的做法是错误的
$('.foo').click(function(e)
{
$(this).href = "/bar";
return true; // this is implicit, but you could return false to cancel the event
});
如果您正在尝试做其他事情,那么我建议使用两个单独的事件,其中一个是自定义事件名称。为什么要为此使用客户端代码 从可用性的角度来看,最好使用服务器端代码检查用户权限,如果出现问题,在页面加载时在禁用按钮旁边显示一条消息。此消息还将提到为该用户启用项目创建可以执行的操作
有时候,你只需要评估一个特定的工具是否是实现目标所必需的。你到底想实现什么?这看起来有点像bass ackwards,可能还有更好的方法。你只是想让事件冒泡起来,这样点击就好像你什么都没做一样?然后在事件处理程序的末尾执行“returntrue”,我认为不应该在同一个方法中附加和触发单击。您不能将单击附加到其他位置吗?您正在单击的此元素是一个锚点(链接)?你想在你真正跟随链接之前改变链接路径中的一些东西吗?如果这是真的,那似乎是可疑的行为。作为一名网络用户,如果我点击的链接在点击时发生了变化,因此将我发送到了一个与我预期不同的地方(如果这是可能的话),我会感到不安。我有签入服务器端,客户端只是试图提供一个良好的用户体验,以拥有一个模态对话框。模态对话框并不总是等同于良好的用户体验。既然您正在检查服务器端,为什么不利用该检查并立即给出反馈,而不是让用户进行额外的查询呢?谢谢,但因为我需要发出一个ajax调用,所以我需要先执行e.preventDefault,“return true”在“e.preventDefault”之后不起作用。