【发布时间】:2016-05-28 10:22:55
【问题描述】:
我有一个输入字段,我需要弄清楚用户输入的最后一个字符是什么。这可能是输入中的最后一个字母,但也可能是输入字段中的任何位置。
我需要这样的东西:
var timerid;
$("#input").on("propertychange change click keyup input paste",function(e){
var value = $(this).val();
if($(this).data("lastval")!= value){
$(this).data("lastval",value);
//console.log(difference between lastval and value or something similar to get the last character the user types in the input)
clearTimeout(timerid);
timerid = setTimeout(function() {
//change action
console.log(value);
input_array(value)
},400);
};
});
【问题讨论】:
-
Offtopic:你不希望出现
if lastval != value,否则如果你一直按同一个键,你会得到同一个键的多个(仍然是去抖动的,但是多个)console.logs,而不是只是最后一个。 -
如果用户粘贴整个单词,您希望在
input_array中存储什么?或者他们选择一些文本并按 ctrl-x。除了“最后一次更改”之外,您可能希望更清楚地定义您的要求。最后输入的字符?那为什么你的例子中有propertychange和paste? -
谢谢,这是用户在这里输入的最后一个字符。但是输入也可以通过其他方式使用,比如粘贴一些东西。
-
您不会得到单一的“处理所有情况”解决方案,因为它们的工作方式不同 - 例如,
keypress是按下的键,paste是粘贴的 (stackoverflow.com/questions/11605415/…)。如果它是为了某种撤消/重做/重播,那么您还需要知道文本框中的位置和任何当前选择的字符(例如选择第一个单词,然后按“a”删除整个第一个单词,你会只记录“a”被按下)。也许您最好的选择是存储前后的“差异”。 -
没有更多关于需求的细节,真的帮不上忙
标签: jquery