我的应用程序中有一个组合框。我还有一个名为“Status”的变量。我希望只有当Status变量的值为5或6时才能启用组合框。否则,我不能更改组合框中的值。它应该只有以前的值..
我写了一个click事件来禁用组合框。但即使组合框被禁用,我也会得到组合框的下拉列表,如果我在下拉列表中选择了一些其他值,它会发生变化。之后只会被禁用..
如何避免这种情况?我希望下拉功能本身被禁用。 这是我写的代码。有人指导我。
<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时,如何保留相同的值并禁用组合框?
答案 0 :(得分:0)
在将enable设置为false之前调用reviewStatus.close()
。
为什么要在ComboBox的click
事件中执行此操作?最好在defectDetails
(或使用defectDetails
作为其dataProvider的控件)的更改事件中执行此操作。
顺便说一下,还有另一个潜在的错误:你在循环中设置enabled
值而不是在设置后打破循环。 reviewStatus.enabled
的最终值仅取决于最后一项 - defectDetails.getItemAt(defectDetails.length - 1)
。
另外,当enabled
为真时,您没有将工具提示恢复正常。
答案 1 :(得分:0)
为什么循环?你能不能只将状态变化中的selectedItem作为Int获取,即:
reviewStatus.enabled = ((reviewStatus.selectedItem as Int)) == 5 || (reviewStatus.selectedItem as Int) == 6) ? false : true;
虽然一旦它被禁用,你可能不会再收到任何StatusChange事件了,是吗?
答案 2 :(得分:0)
也许,你可以在'enabled'上为'reviewStatus'使用绑定功能。像,
<mx:ComboBox id="reviewStatus" enabled = {checkEnabledForReviewStatus(defectStatusId)} />
在脚本部分,
private function checkEnabledForReviewStatus(defectStatusId:String):Boolean
{
return (defectStatusId == "5" || defectStatusId == "6") ? true: false;
}