ユーザーがテキストボックスのEnterボタンを押したときにのみトリガーされるJqueryのイベントはありますか?またはこれを含めるために追加できるプラグインはありますか?そうでなければ、どのように私はこれを行うだろうクイックプラグインを書くのでしょうか?
あなたはあなた自身のカスタムイベントを結び付けることができます
$('textarea').bind("enterKey",function(e){
//do stuff here
});
$('textarea').keyup(function(e){
if(e.keyCode == 13)
{
$(this).trigger("enterKey");
}
});
$('#textbox').on('keypress', function (e) {
if(e.which === 13){
//Disable textbox to prevent multiple submit
$(this).attr("disabled", "disabled");
//Do Stuff, submit, etc..
//Enable the textbox again if needed.
$(this).removeAttr("disabled");
}
});
これはあなたのためのプラグインです:(Fiddle: http://jsfiddle.net/maniator/CjrJ7/ )
$.fn.pressEnter = function(fn) {
return this.each(function() {
$(this).bind('enterPress', fn);
$(this).keyup(function(e){
if(e.keyCode == 13)
{
$(this).trigger("enterPress");
}
})
});
};
//use it:
$('textarea').pressEnter(function(){alert('here')})
それを行うためのjqueryプラグインがあります。
(function($) {
$.fn.onEnter = function(func) {
this.bind('keypress', function(e) {
if (e.keyCode == 13) func.apply(this, [e]);
});
return this;
};
})(jQuery);
それを使うには、コードをインクルードして次のように設定します。
$( function () {
console.log($("input"));
$("input").onEnter( function() {
$(this).val("Enter key pressed");
});
});
よく知られた jQueryでのlive()
の使用は、バージョン1.7
以降は 非推奨 であり、jQuery 1.9
では削除されたになっています。代わりに、on()
の使用をお勧めします。
以下の潜在的な課題を解決するので、バインディングのための次の方法論を強くお勧めします。
document.body
にバインドし、on()
の2番目の引数として$ selectorを渡すことで、再バインドまたは二重バインドのイベントを処理する必要なしに、要素をDOMにアタッチ、デタッチ、追加、または削除できます。これは、イベントが直接document.body
ではなく$selector
にアタッチされているためです。つまり、$selector
を追加、削除、および追加し直すことができ、それにバインドされたイベントはロードされません。off()
の前にon()
を呼び出すことで、このスクリプトは、誤って二重結合のイベントを心配することなく、ページの本体内、またはAJAX呼び出しの本体内に配置できます。$(function() {...})
内にラップすることによって、このスクリプトはページの本体、またはAJAX呼び出しの本体のいずれかによって再びロードできます。 $(document).ready()
はAJAXリクエストでは起動しませんが、$(function() {...})
は起動しません。これが一例です。
<!DOCTYPE html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var $selector = $('textarea');
// Prevent double-binding
// (only a potential issue if script is loaded through AJAX)
$(document.body).off('keyup', $selector);
// Bind to keyup events on the $selector.
$(document.body).on('keyup', $selector, function(event) {
if(event.keyCode == 13) { // 13 = Enter Key
alert('enter key pressed.');
}
});
});
</script>
</head>
<body>
</body>
</html>
HTMLコード:-
<input type="text" name="txt1" id="txt1" onkeypress="return AddKeyPress(event);" />
<input type="button" id="btnclick">
Javaスクリプトコード
function AddKeyPress(e) {
// look for window.event in case event isn't passed in
e = e || window.event;
if (e.keyCode == 13) {
document.getElementById('btnEmail').click();
return false;
}
return true;
}
フォームにデフォルトの送信ボタンがありません
入力がsearch
の場合は、on 'search'
イベントも使用できます。例
<input type="search" placeholder="Search" id="searchTextBox">
。
$("#searchPostTextBox").on('search', function () {
alert("search value: "+$(this).val());
});
もう一つの微妙なバリエーション。私はちょっとした権限の分離に行きました、それで私はenterキーを捕らえることを可能にするためにプラグインを持っています、そして私はただ通常イベントにバインドします:
(function($) { $.fn.catchEnter = function(sel) {
return this.each(function() {
$(this).on('keyup',sel,function(e){
if(e.keyCode == 13)
$(this).trigger("enterkey");
})
});
};
})(jQuery);
そして使用中:
$('.input[type="text"]').catchEnter().on('enterkey',function(ev) { });
このバリエーションでは、イベントの委任を使用できます(まだ作成していない要素にバインドするため)。
$('body').catchEnter('.onelineInput').on('enterkey',function(ev) { /*process input */ });
JQueryのドキュメントを読むまで、Enterボタンのkeypress
イベントを取得できず、しばらく頭を悩ませました。
"keypressイベントは、ブラウザがキーボード入力を登録するときに要素に送信されます。これは、Shiftキー、Escキー、deleteトリガーなどの修飾キーと非印刷キーを除き、keydownイベントに似ています。キー押下イベントではなくキー押下イベント。)( https://api.jquery.com/keypress/ )
keyup
またはkeydown
イベントを使用して、Enterボタンの押下をキャッチする必要がありました。