【问题标题】:How to disable the drop down function of combo box on certain conditions?如何在某些条件下禁用组合框的下拉功能?
【发布时间】:2009-11-21 07:43:37
【问题描述】:

我的应用程序中有一个组合框。我还有一个名为“状态”的变量。我希望仅当 Status 变量的值为 5 或 6 时才启用组合框。否则,我应该无法更改组合框中的值。它应该只有以前的值..

我写了一个点击事件来禁用组合框。但是即使组合框被禁用,我也会得到组合框的下拉列表,如果我在下拉列表中选择一些其他值,它会改变..只有在那之后它才会被禁用..

如何避免这种情况?我希望禁用下拉功能本身。 这是我写的代码。有人指导我。

<mx:FormItem label="Review Status:" width="100%" horizontalAlign="right">
  <mx:HBox>
     <mx:Label  width="30"/>
        <mx:ComboBox id="reviewStatus" dataProvider="{Status}" 
                     width="150" click="onStatusChange(event)"/> 
  </mx:HBox>

动作脚本部分:

private function onStatusChange(event:Event):void
{
  var i:int;
  for(i=0;i<defectDetails.length;i++)
  {
    var defStatusId:String=defectDetails.getItemAt(i).DefectStatusId;
    if(defStatusId=="5"){
               reviewStatus.enabled=true;
    }  
    else  if(defStatusId=="6"){
               reviewStatus.enabled=true;
    }
    else{
               reviewStatus.enabled=false;
             //reviewStatus.selectedItem.label="Review";
             reviewStatus.toolTip="Status can be changed only if Defect Status is Verified or Deferred.";

              //Alert.show("Status can be changed only if defect status is verified or deferred");
    }
   }
  }

如果我也使用 Change 事件,则第一次更改值。只有在那之后,组合框才会被禁用。当状态不是 5 或 6 时,如何保留相同的值并禁用组合框?

【问题讨论】:

    标签: apache-flex combobox onclick onchange


    【解决方案1】:

    在将启用设置为 false 之前调用reviewStatus.close()

    你为什么要在 ComboBox 的 click 事件上这样做?最好在defectDetails(或使用defectDetails 作为其dataProvider 的控件)的更改事件上执行此操作。

    顺便说一句,那里还有另一个潜在的错误:您正在循环中设置enabled 值,并且在设置后没有中断循环。 reviewStatus.enabled 的最终值将仅取决于最后一项 - defectDetails.getItemAt(defectDetails.length - 1)

    另外,当enabled 为真时,您不会将工具提示设置为正常。

    【讨论】:

      【解决方案2】:

      为什么是循环?您能否在状态更改时将 selectedItem 作为 Int 获取,即:

      reviewStatus.enabled = ((reviewStatus.selectedItem as Int)) == 5 || (reviewStatus.selectedItem as Int) == 6) ? false : true;
      

      虽然一旦它被禁用,您可能不会再收到任何 StatusChange 事件,对吧?

      【讨论】:

        【解决方案3】:

        也许,您可以在“启用”上为“reviewStatus”使用绑定功能。喜欢,

        <mx:ComboBox id="reviewStatus" enabled = {checkEnabledForReviewStatus(defectStatusId)} />
        

        在脚本部分,

        private function checkEnabledForReviewStatus(defectStatusId:String):Boolean 
        {
            return (defectStatusId == "5" || defectStatusId == "6") ? true: false;
        }
        

        【讨论】:

          猜你喜欢
          • 2016-01-09
          • 1970-01-01
          • 1970-01-01
          • 2017-05-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-12
          • 2022-11-03
          • 2017-10-07
          相关资源
          最近更新 更多