【问题标题】:onchange in select tag does not call function选择标签中的 onchange 不调用函数
【发布时间】:2016-04-25 12:25:54
【问题描述】:

我正在尝试使用 html 中的<select> 标记创建一个下拉菜单,如下所示,

<select id="Parameter1" onchange="function1()">
  <option value = "0105" name = "Frequency">Frequency</option>
  <option value = "0106" name = "Motor Current">Motor Current</option>
</select>

我试图调用的angularJS函数如下,

$scope.function1 = function(){
  var paramId = document.getElementById("Parameter1").value; 
}

结果导致报错:Uncaught ReferenceError: function1 is not defined

请帮我解决这个问题。

【问题讨论】:

    标签: javascript angularjs drop-down-menu angularjs-scope onchange


    【解决方案1】:

    由于你使用的是AngularJS,你需要使用ng-*指令:

    <select id="Parameter1" ng-change="function1()">
      <option value = "0105" name = "Frequency">Frequency</option>
      <option value = "0106" name = "Motor Current">Motor Current</option>
    </select>
    

    ng-change 属性是一个 AngularJS 指令,与您的 $scope 相关联并且是动态的,而 onchange 只是本机 JavaScript 事件。

    这对大多数人来说都是正确的:

    • ng-src
    • ng-href
    • ng-click

    【讨论】:

      【解决方案2】:

      试试ng-change 指令。 onchange 回调用于纯 DOM。

      Angular 说:“当用户更改输入时评估给定的表达式。表达式会立即评估,这与 JavaScript onchange 事件不同,它仅在更改结束时触发(通常,当用户离开表单元素或按下返回键)”

      看一看:https://docs.angularjs.org/api/ng/directive/ngChange

      【讨论】:

        【解决方案3】:

        使用ng-change 指令而不是onchange,因为function1 在控制器的scope 下。

        var app = angular.module('myApp', []);
        app.controller('ctrl', function($scope) {
          $scope.value = '0105';
          $scope.function1 = function() {
            alert($scope.value);
          }
        });
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
        <div ng-app='myApp' ng-controller='ctrl'>
          <select id="Parameter1" ng-change="function1()" ng-model='value'>
            <option value="0105" name="Frequency">Frequency</option>
            <option value="0106" name="Motor Current">Motor Current</option>
          </select>
          {{value}}
        </div>

        要使用onchange,你的处理函数必须在全局scope

        编辑:还要考虑function1的实现,在处理angular时,使用scope变量。

        【讨论】:

        • 实际上,我有多个 ng-views 并通过添加 ng-change 所有视图与此视图相交。没关系,但当我在下拉列表中选择任何值时,ng-change 仍然不起作用。是的,它在全球范围内。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多