javascript 如何用一些自定义函数 Package click事件

s4n0splo  于 2022-12-25  发布在  Java
关注(0)|答案(4)|浏览(117)

我有一个按钮称为'创建项目',当用户点击按钮,我希望发生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不再绑定到函数。

qc6wkl3g

qc6wkl3g1#

这很简单,你只要做以下几件事:

$('.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 请求来验证某个特性是否可用通常不是一个好主意。如果服务器已经知道用户无法创建项目,那么为什么按钮在第一个位置是可点击的?请使用适当的状态更新控件。

c0vxltue

c0vxltue2#

我不知道你为什么不想做:

$('.foo').click(function(e) {
    $(this).href = "/bar";
});
b4wnujal

b4wnujal3#

我有点糊涂了,你提到了解除绑定,但是在实际的代码中,并没有真正解除绑定事件。
如果您只是尝试在单击某个元素之前执行一些代码,那么您就走错了路。

$('.foo').click(function(e)
{
    $(this).href = "/bar";
    return true; // this is implicit, but you could return false to cancel the event
});

如果您尝试做其他事情,那么我建议使用两个单独的事件,其中一个是自定义事件名称。

wljmcqd8

wljmcqd84#

为什么要为此费心编写客户端代码呢?
从可用性的Angular 来看,最好用服务器端代码检查用户权限,如果有问题,在页面加载时在禁用按钮旁边显示一条消息,该消息还将提到可以做些什么来为该用户启用项目创建。
有时候,你只需要评估一个特定的工具对于实现一个目标是否是必要的。

相关问题