フォーム内にテキストエリアがあります。
<textearea id="message"></textarea>
入力中、ユーザーがテキストエリア内に文字#を入力するたびに、ユーザーがEnterキーまたはスペースバーを押すまで、入力したすべての文字に対して関数をトリガーしたいと思います。
jQueryまたはプレーンJSを使用してこれをどのように可能にしますか?
フォーム内にテキストエリアがあります。
<textearea id="message"></textarea>
入力中、ユーザーがテキストエリア内に文字#を入力するたびに、ユーザーがEnterキーまたはスペースバーを押すまで、入力したすべての文字に対して関数をトリガーしたいと思います。
jQueryまたはプレーンJSを使用してこれをどのように可能にしますか?
あなたはこれを使うことができます:
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));
タイピングのみを検出したい場合は、キーが押されたイベントをリッスンできます。
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の場合はヒットするので、またはヒットした#
場合は関数を呼び出します。 -when-pressed-functionは、もう一度作成するまで実行されません。space
enter
#
anyHitYet=false
誰かが何かを貼り付けるかもしれないので、それは別の話です
上記の回答がOPが望んでいることを実行するかどうかはわかりません。スペースまたはリターンが監視を終了するまで、2番目または3番目の#も監視する必要があると思います。
// 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/を見てください