2016-11-07 107 views
0

我在ComboBox的'onChange'事件中使用CSJS,并且当用户选择一个值时,我想要一个EditBox和第二个ComboBox被设置(第二个ComboBox值是已经在列表中的一个,I只是想选择它)。XPages中如何选择CSJS应该选择ComboBox值?

要设置编辑框在我“的onChange”事件我用:

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

但选择在组合框中的值是更难。起初,我用的编辑框方法:

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

屏幕上的数值变化,组合框功能正常,当文档保存它仍然有旧值。

我尝试了诸如selectedIndex的各种东西,但没有任何工作。最后,我发现这一点:

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

意味着变化被扑出,但没有显示在屏幕上,所以我在最后的生产代码,我同时使用,它的工作原理:

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

这似乎难看我想,在CSJS中必须有更好的方法来做这件事,有人知道吗?

回答

0

设置在香草JavaScript中选择元素(组合框)的值的方法是遍历元素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的选择引擎的工作。

+0

如果我使用上面的香草JavaScript,使用document.getElementById或XSP.getElementById我得到的是'comboBox.options是未定义的。 –

+0

XSP/document.getElementById是否返回undefined或者换句话说是comboBox变量undefined?还检查呈现的HTML - 代表您的组合框的 \t <选项值= “”> \t <选项值= “标准”>标准 \t <期权价值=“低”,选择=“选择”>低 \t <期权价值=“豁免”>排除 \t <期权价值=“超出范围”>超出范围的 ' –