组合框输入值翻译

时间:2015-06-15 16:46:30

标签: jsf combobox icefaces transliteration

我需要实现音译,即我希望我的组合框仅适用于西里尔语数据。当用户输入非西里尔字符时,我将字符转换为相应的西里尔字母并将其返回到组合框,但我的问题是组合框不会搜索我的选项。当我按下退格键时,它会像它应该的那样进行搜索。我正在跳过一些我无法弄清楚的事件,因为我是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)是一个将罗马字符映射为西里尔字母的简单函数。

提前谢谢

1 个答案:

答案 0 :(得分:1)

我做到了,这是我的函数translate(),我用它来翻译某个字符然后按下带有代码的右箭头。我使用right arrow的这个小修补程序来打开以前不会显示的下拉列表。它不一定是右箭头,可以是shiftctrl或其他不会更改用户文本的键。

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();
    } 
 });

我知道这不是最理想的解决方案,但当你遇到像我这样的组件时,你必须找到一个解决方法。我测试它,它工作得很好