使用Firefox和AngularJS的event.preventDefault

时间:2014-06-12 22:07:49

标签: angularjs firefox preventdefault

我知道这个问题有很多线索但我的解释原因有点不同。

背景 我使用角度JS来提交表单。我的GSP中有一个如下所示的常规标签

<form action="formAction" class="form-horizontal" id="UserForm" name="UserForm"
            useToken="true" ng-app="angularApp"  ng-controller="angularController" novalidate="" ng-submit="onSubmitClick();">


 <input type="button" name="next" value="submit"
                                id="submit" />

(实际上是Groovy中的提交标签,但StackOverflow不允许我写这个)

这是一个指定了Action和ng-submit的表单标记。

我想要实现的目标:

单击提交按钮时,将调用“onSubmitButtonClick()”函数,如果表单无效,则需要阻止提交。

onSubmitButtonClick在angular Controller中定义。现在问题是Angular JS只要找到定义的“action”URL就会提交表单。我无法删除该URL的值,因为它在运行时来自服务器端。所以我开始使用event.preventDefault()。

event.preventDefault在Firefox中不起作用所以我开始在函数调用 onSubmitButtonClick(事件)中传递事件,我意识到对于Firefox来说这是未定义的。

那么,有没有办法在firefox中访问事件?我不能使用'return false'或event.returnValue = false,因为Angular会忽略它们。所以,我需要让event.preventDefault工作。

以下是onSubmitButtonClick代码的样子:

  

$ scope.onSubmitButtonClick =函数(EVT){        如果($ scope.UserForm。$无效)       {

    var browserObj=browserDetectFunction();  
    if(browserObj.browser=='Firefox') 
    {   
          evt.preventDefault(); // this throws evt undefined error in Firefox 
    } else 
   { 
      event.preventDefault(); 
   } } }

感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:0)

不完全回答你的问题,但采取不同的路线应该有效(查看你的代码):

<input type="button" name="next" value="submit"
                            id="submit" ng-disabled="UserForm.$invalid" />

如果无效,则删除提交按钮,并将其替换为无效按钮:

<input type="button" name="next" value="submit"
                            id="submit" ng-if="UserForm.$valid" />
<button type="button" name="next" value="submit"
                            ng-if="UserForm.$invalid" />