1

我有两个互斥 OR cfselect,第一个选项为空白(未选择任何内容)。当在 cfselect 中选择非空白选项时,另一个 cfselect 中的空白选项(第一个选项)将使用 javascript 函数选择。然而,单击选项时不会调用 javascript 函数(使用 alert() 进行测试)。

function resetBusiness() {
  alert("resetBusiness() - Entering ..................."");

  var aForm = document.forms[0];
  var optDiv = aForm.getElementById("sDiv").value;

  alert("optDiv: |" + optDiv + "|");

  if (optDiv != "") {
    aForm.getElementById('sBus').selectedIndex  = 0;
    aForm.submit();
  }
}


function resetDivision() {
  alert("resetDivision() - Entering ..................."");

  var aForm = document.forms[0];
  var optBus  = aForm.getElementById("sBus").value;

  alert("optBus: |" + optBus + "|");

  if (optBus != "") {
    aForm.getElementById('sDiv').selectedIndex  = 0;
    aForm.submit();
  }
}

...

<cfselect id="sBus" name="sBus" query="qryBus" display="BU" value="BU"
          selected="#HDF(attributes.sBus)#" multiple="yes" size="6"
          queryPosition="below"
          onClick="javascript:resetDivision(this)">
  <option></option>
</cfselect>
4

1 回答 1

0

@jbabey 是对的,您的警报中有太多引号。尝试更改为:

alert("Entering resetDivision function...");

此外,最好也给您的表单一个 id,而不是使用document.forms[0]它,以防您更改代码并在此表单上方添加另一个表单(如页面顶部的搜索框)。我从来没见过form.getElementById()...

function resetDivision() {
  var optBus = document.getElementById("sBus").value;

  if (optBus != "") {
    document.getElementById('sDiv').selectedIndex = 0;
    document.getElementById("form1").submit();  // substitute with actual form id
  }
}

您的代码还假定元素存在。您可以使您的代码更健壮,并且仅在成功获取对象的属性时才尝试访问它:

var optBus = document.getElementById("sBus");
var optBusVal = '';
if (optBus && optBus != 'undefined') {  // actually I think you only need the first check
    optBusVal = optBus.value;
}
于 2013-05-31T23:55:38.270 回答