我有一个按钮称为'创建项目',当用户点击按钮,我希望发生2件事:
1.一个Ajax调用,用于检查是否允许用户创建项目
1.如果允许,则正常执行按钮,如果不允许,则弹出模态对话框,说明不允许创建新项目。
下面的代码:
$('.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'是行不通的,因为它变成了一个无限循环。unbind第一次可以,但第二次不行,因为foo不再绑定到函数。
4条答案
按热度按时间qc6wkl3g1#
这很简单,你只要做以下几件事:
如果你想拦截click事件并且不传播它,那么只需要返回false。我注意到你的例子更加明确了,但是解决方案还是有些相似的。我们不是返回true来传播事件,而是手动触发click,同时告诉click函数通过返回false来吞下事件。代码看起来如下所示:
但是,通过 AJAX 请求来验证某个特性是否可用通常不是一个好主意。如果服务器已经知道用户无法创建项目,那么为什么按钮在第一个位置是可点击的?请使用适当的状态更新控件。
c0vxltue2#
我不知道你为什么不想做:
b4wnujal3#
我有点糊涂了,你提到了解除绑定,但是在实际的代码中,并没有真正解除绑定事件。
如果您只是尝试在单击某个元素之前执行一些代码,那么您就走错了路。
如果您尝试做其他事情,那么我建议使用两个单独的事件,其中一个是自定义事件名称。
wljmcqd84#
为什么要为此费心编写客户端代码呢?
从可用性的Angular 来看,最好用服务器端代码检查用户权限,如果有问题,在页面加载时在禁用按钮旁边显示一条消息,该消息还将提到可以做些什么来为该用户启用项目创建。
有时候,你只需要评估一个特定的工具对于实现一个目标是否是必要的。