【问题标题】:Reset select to default value with AngularJS使用 AngularJS 将选择重置为默认值
【发布时间】:2014-07-28 08:27:35
【问题描述】:

我对 AngularJS 有以下问题。我有一个 使用 ngOptions 创建的选项进行选择。我想要 将所选选项设置回默认选项。我尝试过了 删除模型变量,例如:

if(angular.isDefined($scope.first)){
    delete $scope.first;
}

但这不起作用。这是我的html。

    <div ng-app="app">
        <div ng-controller="testCtrl">
            <select data-ng-model="first"  data-ng-options="item.name for item in selectContent" required="required">
              <option value="" style="display: none;">-- select --</option>
            </select>
            {{first.value}}
<hr/>
        <input type="button" value="reset dropdown" data-ng-click="resetDropDown()"/>
        </div>
    </div>

这是我的 JavaScript 代码:

angular.module('app', []).controller('testCtrl', function ($scope) {
    $scope.selectContent = [
        {
            name: "first",
            value: "1"
        },
        {
            name: "second",
            value: "2"
        }
    ];

    $scope.resetDropDown = function() {
        if(angular.isDefined($scope.first)){
            delete $scope.first;
        }
    }
});

这是工作的jsfiddle:

http://jsfiddle.net/zono/rzJ2w/

我该如何解决这个问题?

最好的问候。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    您的重置按钮位于包含您的控制器的 div 之外。这意味着您的 reset-function 在您尝试使用它的上下文中不存在。

    改为:

    <div ng-app="app">
        <div ng-controller="testCtrl">
            <select data-ng-model="first"  data-ng-options="item.name for item in selectContent" required="required">
              <option value="" style="display: none;">-- select --</option>
            </select>
            {{first.value}}
            <hr/>
            <input type="button" value="reset dropdown" data-ng-click="resetDropDown()"/>
        </div>
    </div>
    

    使用调试器来确保您尝试修复的代码确实正在执行总是一个好主意。

    【讨论】:

    • 我的错误。这只是示例代码。不是我项目中的实际代码。我已经编辑了代码 +1。
    • @GeorgiNaumov 好吧,它适用于该更改:jsfiddle.net/rzJ2w/7 据我所知,选择下拉菜单已重置为其原始值。这不是你想要的吗?
    • So .. 两种解决方案都有效,但在我的代码中这不起作用。通常我使用你的方式 - 删除。将深入研究我的代码。问题不在于删除。
    • 您应该可以将其设置为null,而不是删除该属性。
    【解决方案2】:
    $scope.resetDropDown = function() {
        $scope.first = "";
    }
    

    【讨论】:

    • 我喜欢这个答案多么简单。就我而言,我从价格下拉列表中选择,然后在更新后单击“全部更新”
    【解决方案3】:

    上述解决方案适用于 Windows 和 Android,但不适用于 iOS 浏览器。那里的事件可能以不同的顺序发生。

    所以对于我的代码我:

    1. 为选择元素创建了 ID,所以我可以很容易地找到它 查询;
    2. 创建了对 to 语句的延迟调用,以确保 重置在最后发生;
    3. 以防万一 以两种方式重置(但在 iOS 中,第一种方式实际上就足够了 也);

      function resetDropDown () {
    	  $timeout(function(){ 
        	  $scope.first  = '';
        	  
        	  // jQuery way
        	  $('select#idOfSelectElement option:first' ).prop( 'selected', true );
    	  }, 200);
      }

    【讨论】:

    • 永远不要将 AngularJS 与 jQuery 代码混用!最终,如果你引入第二个框架,它会弄乱数据绑定和事件处理。
    猜你喜欢
    • 2013-05-30
    • 2016-03-19
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2016-04-10
    • 2014-02-16
    • 2018-05-06
    • 2015-10-08
    相关资源
    最近更新 更多