Jquery 在用户输入期间在html输入中保留文本

Jquery 在用户输入期间在html输入中保留文本,jquery,html,input,Jquery,Html,Input,我试图在html输入中以用户生成的文本为单位添加“USD”。现在我有一些jquery,它在任何输入文本之前追加$,然后在每个keyup上重建输入 $('#pledge_amt_gross_total').on('keyup',function(){ var text = this.value; $(this).val(""); if (text.indexOf("$") == -1){ text = "$ " +text;

我试图在html输入中以用户生成的文本为单位添加“USD”。现在我有一些jquery,它在任何输入文本之前追加$,然后在每个keyup上重建输入

   $('#pledge_amt_gross_total').on('keyup',function(){
      var text = this.value;
      $(this).val("");
      if (text.indexOf("$") == -1){
         text = "$ " +text;
       }
      $(this).val(text);

    }) 
这适用于用户输入文本之前的任何
,但是当我尝试在用户文本之后添加任何
,它就不起作用了

改变一下

if (text.indexOf("$") == -1){
    text = "$ " +text;
}


我已经制作了一个带有正则表达式的版本,用于在输入中查找数字,并将其包装到您想要的内容中。我添加了一个超时,以防止在用户完成输入之前移动光标。试试这个

守则:

var formatTimeout;
$("#pledge_amt_gross_total").on("keyup", function() {
    var self = $(this);
    clearTimeout(formatTimeout);
    formatTimeout = setTimeout(function() {
        var regex = /\d+/;
        var amount = self.val().match(regex);
        if (amount.length > 0) {
         self.val("$ " + amount + " USD");   
        } else {
              self.val("");       
        }   
    }, 1000);
});
如果希望在setTimout函数中应用格式之前的时间更快或更慢,则可以更改该时间


编辑:

如果您希望任何数字的格式为concat:


我将正则表达式替换为可以查找任何数字的全局正则表达式。然后我将数字合并为一。

这也不起作用。由于输入值随后变为val=“$55 USD”,因此下次我要添加更多字符(或更改数字)时,它会创建一个类似“$6USD55”的字符串,其中数字是在USD之后添加的,而不是在$之后添加的sign@AlexNeigher在添加之前,您必须检查文本是否已经包含USD。见我的编辑我仍然在输入中得到像$4 USD444这样的字符串。问题是,当你按下一个键后,一旦它工作正常,然后你再按下另一个键,它不会改变原始字符串,只会将其添加回var text@user2532739的末尾。这更接近了,但是如果我键入一些内容,等待填充值,然后继续键入,它不会编辑最初包含的值,它只是在最后添加,然后删除。好的,我将用这个版本编辑我的文章,这个版本可以接受任何数字,并对它进行连接:注意,通过连接,你实际上不需要setTimeout。
var formatTimeout;
$("#pledge_amt_gross_total").on("keyup", function() {
    var self = $(this);
    clearTimeout(formatTimeout);
    formatTimeout = setTimeout(function() {
        var regex = /\d+/;
        var amount = self.val().match(regex);
        if (amount.length > 0) {
         self.val("$ " + amount + " USD");   
        } else {
              self.val("");       
        }   
    }, 1000);
});
var formatTimeout;
$("#pledge_amt_gross_total").on("keyup", function() {
    var self = $(this);
    clearTimeout(formatTimeout);
    formatTimeout = setTimeout(function() {
        var regex = /\d+/g;
        var amount = self.val().match(regex);
        if (amount.length > 0) {
         self.val("$ " + amount.join("") + " USD");   
        } else {
              self.val("");       
        }   
    }, 1000);
});