如何在XPages CSJS中选择一个组合框值

How in XPages CSJS should I select a ComboBox value?

本文关键字:一个 组合 XPages CSJS 选择      更新时间:2023-09-26

我在ComboBox的'onChange'事件中使用CSJS,当用户选择一个值时,我想要设置一个EditBox和第二个ComboBox(第二个ComboBox值是一个已经在列表中,我只想选择它)。

在我的'onChange'事件中设置编辑框,我使用:

XSP.getElementById("#{id:fldEditBox}").value = newEditBoxValue;

但是在ComboBox中选择一个值要困难得多。首先,我使用了EditBox方法:

XSP.getElementById("#{id:fldComboBox2}").value = selectedComboBoxValue;

屏幕上的值改变了,ComboBox功能正常,保存文档时仍然是旧的值

我尝试了各种各样的东西,如selecteindex,但没有工作。最后我发现:

document.getElementsByName("#{id:fldComboBox2}")[0].value = selectedComboBoxValue;

意味着更改被保存,但在屏幕上不可见,所以在我的最终产品代码中,我使用了这两种方法,它可以工作:

XSP.getElementById("#{id:fldComboBox2}").value = selectedComboBoxValue;
document.getElementsByName("#{id:fldComboBox2}")[0].value = selectedComboBoxValue;

这对我来说似乎很丑陋,在CSJS中一定有更好的方法来做到这一点,有人知道吗?

在香草JavaScript中设置select元素(组合框)的值的方法是遍历元素的options属性以找到您想要选择的选项:

var comboBox = document.getElementById("#{id:comboBox}");
for (var i=0; i < comboBox.options.length; i++) {
  if (comboBox.options[i].value == "ValueYouWantSelected") {
    comboBox.options.selectedIndex = i;
    break;
  }
}

如果你有可用的JQuery,你可以做得更优雅:

var xpageID = "#{id:comboBox}".replace(/:/gi, "'':");
var valueYouWantSelected = "someValue";
$('#' + xpageID + ' option[value="' + valueYouWantSelected + '"]').prop('selected', true);

xpageID变量的存在是因为您必须转义XPages放入生成的id中的':'字符,以便它与JQuery选择器引擎一起工作。