我在表单中有一个textarea:
<textearea id="message"></textarea>
在输入时,每当用户在textarea中键入字符#时,我想为之后键入的每个字符触发一个函数,直到用户点击输入或空格键。
如何使用jQuery或普通JS?
答案 0 :(得分:2)
您可以使用:
var myCallback = function () {
//put your code here
}
(function (callback) {
var jMessage = $('#message'),
callbackCallable = false,
keycodeEnter = 13,
keycodeSpace = 32;
jMessage.keyup(function (e) {
var lastLetter = jMessage.val().slice(-1);
if (lastLetter === '#') {
callbackCallable = true;
} else if (e.keyCode === keycodeEnter || e.keyCode === keycodeSpace) {
callbackCallable = false;
} else if (callbackCallable) {
callback();
}
});
}(myCallback));
答案 1 :(得分:0)
如果您只想检测打字,可以收听按键事件。
var anyHitYet = false;
jQuery('#massage').keydown(function (event) {
if (anyHitYet) return;
var key = event.keyCode;
if (key === 51) {
//call your function here
} else if (key === 13 || key === 32) {
anyHitYet = true;
}
});
基本上如果它是51然后#
被击中,那么如果space
或enter
被#
命中,则调用你的函数 - 当按下的函数不会被执行时直到你再次anyHitYet=false
有人可能会粘贴一些东西,但这是一个不同的故事
答案 2 :(得分:0)
不确定上述答案是否符合OP的要求。 我认为应该监视第二个或第三个#,直到一个空间或返回结束监视。
// have a flag somewhere and initialize it to FALSE
var doMonitor = FALSE;
$('#message').keydown(function(event){
// trigger monitoring after # was tipped
// (only once till space or return reset)
if(event.keyCode == 51 && !doMonitor){
doMonitor = TRUE;
}
else if(event.keyCode == 32 || event.keyCode == 13)
doMonitor = FALSE;
else if(doMonitor){
// do whatever needs to be done
}
});
您还可以向#message textarea添加属性并将其删除(或更改其值),而不是使用变量。
// for setting an attribute
.attr( attributeName, value )
// for removing it
.removeattr( attributeName )
在这里http://api.jquery.com/removeAttr/和http://api.jquery.com/attr/