选择选项时禁用列表

时间:2016-11-26 10:54:05

标签: vbscript hta

我的代码部分正常运行。该列表被禁用,但我没有注意到我已选择" product1"然后启用列表。选择的任何其他内容都应完全禁用该列表。列出ID产品。所以我想我选择的选项的语法是什么,不确定这是否是正确的写入方式。

的VBScript

'Disables or enables list based on selection
Function enabler()
    For Each opt In document.GetElementByID("customer").Options
        If opt.Selected = "product1" Then
          document.GetElementByID("product").Disabled = False
        Else
          document.GetElementByID("product").Disabled = True
        End If
    Next
End Function

HTA

...
<select size="5" id="product" name="ListboxUserRole" onChange="SaveListboxUserRoleValue">
    <option value="1" selected="selected">product1</option>
    <option value="2">product2</option>
    <option value="3">product3</option>
...
<select size="5" id="customer" name="ListboxCustomer" onChange="SaveListboxCustomerValue" value="1">
    <option value="1" selected="selected">customer1</option>
    <option value="2">customer2</option>
    <option value="3">customer3</option>
    <option value="4">customer4</option>
...

1 个答案:

答案 0 :(得分:0)

如果我做对了,您需要在customer选择中选择product1时启用product选择,并禁用其他任何内容。

首先product选择更改事件已链接到SaveListboxCustomerValue()customer选择停用应在SaveListboxCustomerValue()内进行处理,仅使用<body onload="enabler()">替换<body>

IMO更好地重做算法以使用selectedIndex选择对象的product属性,然后不需要enabler()。移除enabler(),然后对SaveListboxCustomerValue()进行更改:

Sub SaveListboxCustomerValue()

    ' enable customer if the first item in product selected
    customer.disabled = product.selectedIndex <> 0

    ' the rest part of the code

End Sub

否则,如果您想保留 enabler(),请阅读Option Object Properties。您当前的条件始终返回False,因为布尔值永远不会等于字符串"product1"。代码应该是这样的:

Sub enabler()

    Dim opt
    Dim match

    For Each opt In product.options
        match = opt.selected And opt.label = "product1"
        If match Then Exit For
    Next
    customer.disabled = Not match

End Sub
应该在enabler()更改时调用

customer,添加对其的调用:

Sub SaveListboxCustomerValue()

    enabler()

    ' the rest part of the code

End Sub