如果其他功能同时触发了警报,则无法执行该功能

时间:2018-12-19 02:39:50

标签: javascript jquery

  

问题

动作 A 会同时触发功能 B 和功能 C 。 如果 B 引发警报,我可以  阻止 C 的执行,也许是通过使用某种常规的侦听器功能?

我寻求的解决方案不涉及向功能 C 添加特定的侦听器,它必须保持通用。


  

我的例子

下面有以下代码,当按下模态中的按钮时会触发以下代码。这将删除内容,直到处理了GET方法并将用户返回到重定向页面为止。

$( ".loadingEnabled" ).click(function( event ) {
    $(".loadingSpinner").css("display","block");
    $(".myModalContent").hide();
    $(".modal-header").html("<b>Processing your request</b>");
    $(".modal-footer").hide();
});

在模式内,我只有几个简单的验证脚本,例如:

    } else if ($("#name").val().length < 2){
      event.preventDefault();
      alert("You cannot proceed without entering your name")
  }

因此,在当前设置下,用户将触发loadingEnabled单击功能,但是,如果数据无效,则loadingEnabled将触发hide()css() submit消失并触发preventDefault()时无限期地。

问题是,如果触发了loadingEnabled,我可以在alert函数中引入一些阻止执行的内容吗?

我可以想到解决方法。我只是想知道这种情况下是否有用。

2 个答案:

答案 0 :(得分:0)

一些建议。

  1. 您可以从验证中返回一个布尔值,并以此为条件使loadingEnabled代码成为条件:

    $( ".loadingEnabled" ).click(function( event ) {
    if(validation()){
        $(".loadingSpinner").css("display","block");
        $(".myModalContent").hide();
        $(".modal-header").html("<b>Processing your request</b>");
        $(".modal-footer").hide();
            }
       });
    

然后(在验证功能中):

return true; // assuming that validation has passed
} else if ($("#name").val().length < 2){
event.preventDefault();
alert("You cannot proceed without entering your name")
return false;
}

或2。您可以颠倒流程,单击按钮时调用验证功能,命名其他功能,仅在验证通过后才调用

答案 1 :(得分:0)

我没有找到要考虑的解决方案,但是,我实施的解决方案涉及:

  1. 实例化一个新的全局变量validatedtrue
  2. loadingEnabled函数放置在validation函数之后,以便系统首先执行validation
  3. 如果输入无效,并且如果所有验证都通过,则在每个失败的验证中添加一行以将validated设置为false
  4. 设置条件validated仅在trueif statement时执行loadingEnabled

以上解决方案确保了validation可以重复使用。