我需要实现音译,即我希望我的组合框仅适用于西里尔语数据。当用户输入非西里尔字符时,我将字符转换为相应的西里尔字母并将其返回到组合框,但我的问题是组合框不会搜索我的选项。当我按下退格键时,它会像它应该的那样进行搜索。我正在跳过一些我无法弄清楚的事件,因为我是JSF的新手。
这是我的组合框:
<ace:comboBox id="somCounty" styleClass="toCyr"
value="#{myBean.county}"
valueChangeListener="#{myBean.countyChange}"
filterMatchMode="contains">
<f:selectItems id="countiesSelected" value="#{myBean.listAllCounty}"/>
<ace:ajax render="@this somMunicipality map" execute="@this" />
</ace:comboBox>
这是我映射字符的函数:
$(".toCyr input:first-child").bind("keyup", function () {
var elem = $(this);
var text = $(this).val();
var convertedText = toCyr(text);
$(this).val(convertedText);
});
注意toCyr(char)
是一个将罗马字符映射为西里尔字母的简单函数。
提前谢谢
答案 0 :(得分:1)
我做到了,这是我的函数translate()
,我用它来翻译某个字符然后按下带有代码的右箭头。我使用right arrow
的这个小修补程序来打开以前不会显示的下拉列表。它不一定是右箭头,可以是shift
,ctrl
或其他不会更改用户文本的键。
function translate(){
// this selector is specified for jsf generated code
var target = $(".cyrillic input:first-child");
target.each(function () {
var i = $(this);
i.keyup(function () {
$(this).trigger(jQuery.Event('keyup', {keyCode: 39, which: 39}));
});
i.on("input", function () {
var elem = $(this);
var text = elem.val();
var convertedText = toCyr(text);
// convertedText = convertedText.toUpperCase();
elem.val(convertedText);
});
});
}
这是我点击组合框容器时的事件触发器:
$(".west-panel").click(function () {
translate();
});
这里是标签功能,在我的情况下我有2个组合框,所以当用户点击标签而不是点击时我想再次触发我的功能:
$(".west-panel").keydown(function(event){
if(event.keyCode === 9 || event.which === 9){
translate();
}
});
我知道这不是最理想的解决方案,但当你遇到像我这样的组件时,你必须找到一个解决方法。我测试它,它工作得很好