【问题标题】:Angular js ng-click not workingAngular js ng-click不起作用
【发布时间】:2018-04-30 04:58:55
【问题描述】:

我正在尝试使用 JavaScript 添加表单验证。当我添加

 document.getElementById("one").setAttribute("ng-click", "insertData()"); 

validateForm函数,我按下按钮后它不起作用。

当我将该行移出validateForm 函数时,它可以工作,但不执行表单验证。

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>

</head>
<body>

<div class="container">
   <div ng-app="myapp" ng-controller = "controller">
        <div class="row">
            <div id="divID"> </div>
                <div class="col-sm-12 col-md-10  col-md-offset-1 ">
                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> 
                            <input class="form-control" id = "k" placeholder="Name" ng-model = "username" name="user_name" type="text" autofocus>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon">
                                <i class="glyphicon glyphicon-user"></i></span>
                            <input class="form-control" placeholder="NIC" ng-model = "nic" name="NIC" type="text" value="">
                        </div>
                    </div>

             <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon"> @</span>
                            <input class="form-control" placeholder="Email" ng-model = "Email" name="email" type="email" value="">
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon">
                                <i class="glyphicon glyphicon-lock"></i></span>
                            <input class="form-control" placeholder="Password" ng-model = "password" name="Password" type="password" value="">
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon">
                                <i class="glyphicon glyphicon-lock"></i></span>
                            <input class="form-control" placeholder="Confierm Password" ng-model = "Conf_password" name="Conf_password" type="password" value="">
                        </div>
                    </div>

                    <div class="form-group">
                        <input type="submit" id = 'one' onclick="validateForm()"  class="btn btn-lg btn-primary btn-block" value="Sign Up">
                    </div>
                </div>
            </div>
       </div>
   </div>
  </body>
</html>
  <Script>
     function validateForm() 
       {
       var x = document.getElementById("k").value;
       if (x == "") 
         {
         document.getElementById("k").setAttribute("placeholder", "Insert Name");
         }
         else
         {
           //document.getElementById("one").removeAttribute("onclick");
           document.getElementById("one").setAttribute("ng-click", "insertData()");
          } 
       }
      // when add this part here code working fine ---- document.getElementById("one").setAttribute("ng-click", "insertData()");        

     var app = angular.module("myapp", []);
     app.controller("controller",function($scope,$http){
     $scope.insertData = function()
        {
         $http.post(
        "Signup.php",
        {'username':$scope.username,'nic':$scope.nic,'email':$scope.Email,'password':$scope.password,'Conf_password':$scope.Conf_password }

    ).then(function(data){

     var result = angular.toJson(data.data);
     var myEl = angular.element( document.querySelector( '#divID' ) );
     if(result.replace(/^"|"$/g, '') == 1)
       {
       myEl.replaceWith("<div class='alert alert-success alert-dismissable fade in'><a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a><strong>Success!</strong>You have sucessfully registerd. Please login</div>"); 
       }
     else
        {
         myEl.replaceWith(result.replace(/^"|"$/g, '')); 
         }
      $scope.username = null;
    });
  }
});

</script>

【问题讨论】:

    标签: javascript angularjs http bootstrap-4


    【解决方案1】:

    好吧,你要做的不是 angularjs 的工作方式;我建议你阅读angularjs form documentation,尤其是绑定到表单和控制状态一章。 您的代码似乎在 jquery 和 angularjs 之间发生冲突,我建议您重新阅读angularjs phonecat tutorial,或者更好的是尝试新版本的 angular

    【讨论】:

      【解决方案2】:

      你需要告诉 Angular 你已经添加了一个属性,否则它不起作用。向模板文件添加属性时,Angular 知道,但通过setAttribute() 添加属性时,Angular 不知道。


      在您的控制器中,添加以下两个依赖项:

      app.controller("controller", function($compile, $document, $scope, $http) {
          // 
      });
      

      现在,给元素添加属性后,需要重新编译:

      $document.getElementById("one").setAttribute("ng-click", "insertData()"); 
      
      // Try this:
      $compile($document.getElementById("one"));
      
      // If it doesn't work, or gives an error, try this:
      $compile($document.getElementById("one"))($scope);
      

      注意:我使用 $document,而不是 document

      Documentation for $compile


      注意:我无法真正测试这是否适用于您的代码,但它至少应该为您指明正确的方向。您的问题是 Angular 不知道您添加了该属性。

      【讨论】:

      • 非常感谢您的回答.. 添加 ng click 我应该把这个 $compile($document.getElementById("one")) 放在哪里?
      • 在你的控制器中,因为它可以执行 Angular 代码。但是,请确保它在您添加元素之后运行
      • 是的,我明白了......我应该将它添加到角度代码中,但我找不到应该将它放在角度代码中的哪个位置?
      • 试试你的控制器的底部。
      • 我添加 $document.getElementById("one").setAttribute("ng-click", "insertData()");到我的 validateForm() 函数和 $compile($document.getElementById("one"))($scope);试过但它不起作用并显示“TypeError:$document.getElementById 不是函数”错误
      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多