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

Not able to avoid the last character input when using the dojo keypress event

我正在尝试在按键事件时调用 dojo。我想要实现的是,一旦遇到'%',我想开始读取后续字符,一旦遇到'?',我想将文本子串并替换整个文本带有子字符串文本的框。

虽然我可以对文本和所有内容进行子字符串化,但我面临的问题是 '?'出现在子字符串文本之后。

即什么时候'?'按下,字符串被子字符串化,所需的文本被替换到框中。但是,文本伴随着“?”,我不想要。

例如 我输入 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 中试过。

虽然您已经尝试过 "keyup" 活动并且它 "didn't work",但我还是建议查看此活动。 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("?"));
        }
    });
});

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

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