【问题标题】:ng-disabled doesn't work in Angular Chosenng-disabled 在 Angular Chosen 中不起作用
【发布时间】:2016-09-08 07:35:27
【问题描述】:

我的项目中有两个 select 框。第一个显示格式,第二个有两个options,即“是”和“否”。我在这两个盒子上都使用了角度选择。

最初,第二个选择框中的“是”选项被禁用。当用户从第一个 select 框中选择“PDF”作为格式时,我想启用 option

这些是我的选择框

//first  
<select name="exporType" id="exporType" ng-model="interactor.parameters.exporType" ng-options="format for format in formatOptions" ng-change="checkDisable();" chosen>
        <option value=""></option>
</select>

//second
<select name="maskAccountNumber" id="maskAccountNumber" ng-model="interactor.parameters.maskAccountNumber" style="width:145px;" chosen>
    <option value=""></option>
    <option value="N">No</option>
    <option value="Y" ng-disabled="disableoption">Yes</option>
</select>

我在第一个select 框上调用ng-change,这将根据其选择将“是”option$scope.disableoption)设置为truefalse

函数如下

$scope.checkDisable = function() {

        console.log("Export type is "+$scope.interactor.parameters.exporType);
        if($scope.interactor.parameters.exporType == "PDF")
            $scope.disableoption = false;
        else
            $scope.disableoption = true;
};

问题是,当我从第一个 select 框中选择“PDF”作为选项时,“是”option 不会更新。

如果我从我的select 框中删除chosen,它可以正常工作,但不适用于chosen

EXAMPLE WITH CHOSEN

EXAMPLE WITHOUT CHOSEN

【问题讨论】:

标签: angularjs jquery-chosen angular-chosen


【解决方案1】:

我已多次在此站点上被建议不要使用实际的 &lt;option&gt; 标签来构建带有 Angular 的 &lt;select&gt;,因为你会失去控制器可以拥有的一些动态能力。在下面的解决方案中,我完全控制了控制器中两个选择的状态。按照 Fiddle 进行工作演示。

HTML:

<select name="exporType" id="exporType"
        ng-model="exporType"
        ng-options="format.value as format.name for format in formatOptions"
        ng-change="checkDisable()" style="width:145px;">
</select>

<select name="maskAccountNumber" id="maskAccountNumber"
        ng-model="maskAccountNumber"
        ng-options="mask.value as mask.name disable when mask.disabled for mask in maskOptions"
        ng-change="checkDisable()" style="width:145px;">
</select>

控制器:

function MainController($scope) {
    $scope.disableoption = true;
    $scope.formatOptions = [{value: "BAI", name: "BAI"},
                            {value: "CSV", name: "CSV"},
                            {value: "PDF", name: "PDF"},
                            {value: "QBO", name: "QBO"},
                            {value: "QFX", name: "QFX"},
                            {value: "XLS", name: "XLS"}];

    $scope.maskOptions = [{value: "N", name: "No", disabled: false},
                          {value: "Y", name: "Yes", disabled: true}];

    $scope.exporType = "BAI";
    $scope.maskAccountNumber = "N";

    $scope.checkDisable = function() {
    if ($scope.exporType == "PDF") {
        // show the 'Yes' option for PDF
        $scope.maskOptions[1].disabled = false;
    }
    else {
        // hide the 'Yes' option if not PDF
        $scope.maskOptions[1].disabled = true;

        // change the mask to 'No' when switching to anything
        // other than PDF, since 'Yes' cannot be selected
        $scope.maskAccountNumber = "N";
    }
};

在这里演示

JSFiddle

【讨论】:

  • 问题是它不适用于选择的角度。这与select 无关。
  • @zeroflagL 我的 Fiddle 现在可以正常工作了,我相信你错了,因为 &lt;select&gt; 肯定有问题。请考虑删除您的反对票,除非您当然认为工作代码值得反对。
  • @Tim Biegleisen:你更新的小提琴是完美的,它工作正常,毫无疑问,但我的问题是关于选择的角度。我已经用“选择”属性更新了你的小提琴,但它不起作用。看这里jsfiddle.net/Kunalh/zkeqxkd1/30我想让它与选定的角度一起工作
  • 再次:问题是关于 Angular 的选择。您的小提琴不使用选择的 Angular。因此,您的代码是否有效并不重要。也许您的解决方案解决了问题,但您的代码并不能证明这一点。
  • @Nishant123 如果您需要解决 chosen 指令的方法,也许这个答案会对您有用。
猜你喜欢
  • 2018-07-10
  • 2018-06-06
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多