使用dojo keypress事件时无法避免最后一个字符输入

时间:2015-02-10 12:04:43

标签: javascript dojo

我正在尝试在按键事件上调用dojo。我想要达到的目标是,一旦遇到'%',我想开始阅读后续角色,一旦遇到'?',我想要分-string文本并用子弦文本替换框中的整个文本。

虽然我能够对文本和所有内容进行细分,但我面临的问题是'?'它出现在子弦文本之后。

即'?'按下,字符串被子字符串,并在框中替换所需的文本。但是,文字附有'?',我不想要。

E.g。 我输入 11111%B3333555533335555?,所以我希望将整个文本替换为 3333555533335555 ,但是,在我的情况下,它以 3333555533335555结尾? 我使用以下代码来调用事件:

require(["dojo/keys", "dojo/dom", "dojo/on", "dojo/domReady!"],
            function(keys, dom, on){
        on(dom.byId(abc), "keypress", function(evt){
//substring the code here and set the value back
});
});

此外, keyup 事件对我不起作用。不知道这是否能解决问题,但它不起作用。在Firefox和IE中尝试过。

2 个答案:

答案 0 :(得分:2)

虽然你已经尝试了" keyup"事件和它没有工作",我建议你参加这个活动。当密钥已经释放时,抛出keyup event,这将是用修改后的值替换输入(input.set(" value",value)的最佳时间。

请说明使用keyup时出了什么问题。 我创建了JSfiddle,它使用了keyup事件。

require(["dojo/keys", "dojo/dom", "dojo/on", "dojo/domReady!", "dijit/form/TextBox"],
        function(keys, dom, on, domready, tb){
    var textbox = dom.byId("abc");
    on(textbox, "keyup", function(evt){
        //substring the code here and set the value back
        console.log(evt.target.value);
        if (evt.target.value.indexOf("?") > -1){
            evt.target.value = evt.target.value.substring(0, evt.target.value.indexOf("?"));
        }
    });
});

答案 1 :(得分:0)

在您的文本框中插入字母后(或者您用于收集输入的任何内容)触发了按键事件,因此您在字符串中收到问号。所以我会修改你的代码:

require(["dojo/keys", "dojo/dom", "dojo/on", "dojo/domReady!"],
            function(keys, dom, on){
        on(dom.byId(abc), "keypress", function(evt){
            //substring the code here and set the value back
            evt.target.value = evt.target.value.slice(evt.target.value.indexOf("%") + 1, -1);
        });
});