我有一个正常工作的cfselect。我有一个onclick事件刷新绑定到cfselect,因为查询内容不断变化,我希望用户有更新列表。现在我想添加“选择任何总线”作为我不能的第一个选项要做。
我尝试在从cfc返回之前向查询结果添加一行。但我无法选择“选择任何总线”以外的任何其他值。
我的cfselect代码是:
<cfinvoke component="getCalculatorData" method="getAllBus" argumentcollection="#houseArgs#" returnvariable="qry_busList">
<cfform style="align:centre" id="frm_drpDwnBus" name="frm_drpDwnBus">
<cfinput name="hdnrr" value="#rrSbstring#" type="hidden">
<cfselect name="dpDwnBs" bindOnLoad="true"
bind="cfc:getCalculatorData.getAllBus(hdnrr.value)"
value="busType_id_pk"
display="busType_name" >
onclick="javascript:refresh(hdnrr.value)"
<option value="0" on>Select a Bus</option>
</cfselect>
</cfform>
我的cfc:
SELECT busType_id_pk
,busType_name FROM tbl_bustype
在哪里busType_railroad_letter =
的javascript:
function refresh(s)
{
ColdFusion.Bind.assignValue('dpDwnBs','value', dataCalcu.getAllBus(s))
}
一旦我删除了onclick事件,一切正常。请帮帮我。
答案 0 :(得分:0)
原先误读了这个问题,让我们再来一次。
选择框上的站立onclick绑定事件将永远不会起作用。要像大多数人一样使用选择框,请单击两次:一次将其放下,一次选择项目。但是,在第一次单击时,您重置该项目。即使盒子保持打开(我怀疑这可能取决于浏览器,但还没有真正测试过),第二次点击也会重置它,这意味着你将丢失你的选择,因为所选的项目被销毁并重新创建为新的DOM节点。
我可以想到三种解决方案。
首先,您可以向表单添加刷新按钮,然后刷新选择框中的值。
其次,您可以使用jQuery或类似方法绑定事件,然后单击刷新选项列表,然后删除onclick事件绑定。这意味着用户只能刷新一次选项,但(希望)应该足够了。如果页面uis多次使用(例如通过AJAX),您可以在提交时重新绑定onclick刷新事件。
最后,将表单项显示为不可编辑的文本字段(onfocus =“blur();”IIRC)。添加一个按钮,或者更改焦点事件以启动一个模态窗口,通过AJAX或类似方式从CFC中提取选项并显示它们,这样当他们选择编辑这个项目时,他们会得到一组新的选择。
所有这些都有不保留先前选择的缺点,因为绑定刷新会破坏所有选项odes并构建新的选项列表。