- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
HTML:
<form id="myform">
<input id="firstfield" name="firstfield" value="100" type="text" />
<input id="secondfield" name="secondfield" value="200" type="text" />
</form>
jQuery:
jQuery(document).ready(function() {
$('#firstfield').keyup(function() {
alert('Handler for firstfield .keyup() called.');
});
$('#secondfield').keyup(function() {
alert('Handler for secondfield .keyup() called.');
});
});
演示:http://jsfiddle.net/KtSja/3/
在此演示中,如果您将光标放在第一个字段中然后跳出(不进行任何更改),则会在第二个字段上触发 keyup 事件。也就是说,您正在跳出第一个字段并进入第二个字段。这种行为是否正确?我怎样才能防止这种情况发生?这同样适用于 shift + tab。
注意:
a) 我相信所有其他可打印和不可打印的键都会在第一个字段上触发 keyup 事件。
b) 如果您按住选项卡直到它移出两个字段,则根本不会触发该事件。
最佳答案
键的默认操作在 keydown
事件期间执行,因此,自然地,到 keyup
传播时,Tab 键已将焦点更改到下一个字段。
您可以使用:
jQuery(document).ready(function() {
$('#firstfield, #secondfield').on({
"keydown": function(e) {
if (e.which == 9) {
alert("TAB key for " + $(this).attr("id") + " .keydown() called.");
}
},
"keyup": function(e) {
if (e.which != 9) {
alert("Handler for " + $(this).attr("id") + " .keyup() called.");
}
}
});
});
这样,如果按下 Tab 键,您可以在处理其他键之前进行任何必要的调整。 See your updated fiddle for an exampe.
根据您的评论,我修改了函数。 JavaScript 最终有点复杂,但我会尽力解释。 Follow along with the new demo here.
jQuery(document).ready(function() {
(function($) {
$.fn.keyAction = function(theKey) {
return this.each(function() {
if ($(this).hasClass("captureKeys")) {
alert("Handler for " + $(this).attr("id") + " .keyup() called with key "+ theKey + ".");
// KeyCode dependent statements go here.
}
});
};
})(jQuery);
$(".captureKeys").on("keydown", function(e) {
$("*").removeClass("focus");
$(this).addClass("focus");
});
$("body").on("keyup", "*:focus", function(e) {
if (e.which == 9) {
$(".focus.captureKeys").keyAction(e.which);
$("*").removeClass("focus");
}
else {
$(this).keyAction(e.which);
}
});
});
基本上,您可以将 class="captureKeys"
赋予任何您想要监控按键的元素。首先看第二个函数:当 keydown
在您的 captureKeys
元素之一上触发时,它被赋予一个名为 focus
的虚拟类。这只是为了跟踪最近获得焦点的元素(我在演示中为 .focus
提供了背景作为视觉辅助)。因此,无论按下什么键,它所按下的当前元素都会被赋予 .focus
类,只要它也有 .captureKeys
。
接下来,当 keyup
在任何地方 触发时(不仅仅是在 .captureKeys
元素上),该函数会检查它是否是一个制表符.如果是,则焦点已经转移,并且自定义 .keyAction()
函数将在最后一个获得焦点的元素上调用 (.focus
) .如果它不是选项卡,则在当前元素上调用 .keyAction()
(但同样,仅当它具有 .captureKeys
时)。
这样应该可以达到你想要的效果。您可以在 keyAction()
函数中使用变量 theKey
来跟踪 which key was pressed ,并据此采取行动。
对此的一个主要警告:如果 .captureKeys
元素是 DOM 中的最后一个元素,在大多数浏览器中按 Tab 键将从文档中移除焦点,并且keyup
事件永远不会触发。这就是我在演示底部添加虚拟链接的原因。
这提供了一个基本框架,因此您可以根据自己的需要对其进行修改。希望对您有所帮助。
关于javascript - 选项卡上的 Keyup 事件行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18020098/
我创建了一个 keyup() 函数,代码在这里 $(document).ready(function() { var scntDiv = $('#add_words'); var wo
我希望它只在 keyup 而不是之前触发。有人可以帮忙吗? $(function() { $('#acf-field_5a32085c7df98-field_5a3208f87df99').on('k
在 Chrome 30.0.1599.101 和 IE 11 中,输入选择器无法在 Firefox 25.0.1 中正常工作 在 Chrome/IE 中损坏: $(document).ready(fu
在我为工作而构建的网站上,我们有一个搜索栏,用户可以在其中输入内容以搜索存储在一组元素数据中的各个字段。当他们开始输入时,问题出现在较慢的浏览器中。 我尝试做的是以下操作,使用 jQuery Defe
我正在尝试使用 vanilla js 编写一些简单的东西来在用户按下回车键时触发一个函数。我在下面找到了一些代码,但我不确定如何让它工作,因为该函数没有名称。 function (event) {
场景如下: 我有一个内容可编辑的 div。我还有一个文本区域,其中 .keyup() 上发生了一些事情。 我需要这样,在content editable div的keyup()上,将contented
有一个输入文本会在“onkeyup”事件上触发一个函数。当该函数触发时,我将使用 .on("keyup") 方法绑定(bind)一个“keyup”事件,以获取最后按下的键以查明它是否是字母数字,以便触
我想知道如何对同一个 #id 执行 .keyup() 和 .click() ? 即本质上,我想在用户尝试点击 enter 或点击 #search 按钮时验证 #id 。 非常感谢 最佳答案 $('#f
我必须在这里使用jquery keyup来检测用户是否输入任何文本,但我的问题是如果用户使用鼠标粘贴文本,它将无法检测到它,你能告诉我原因吗? 这是我的源代码: $("textarea").keyup
我正在尝试创建一个输入字段,用户只能在其中输入数字。这个功能对我来说已经可以正常工作了: $('#p_first').keyup(function(event){ if
我正在尝试编写类似于“占位符”polyfill 的内容。我想捕获输入字段上的 keyup 事件并获取用户输入的字符,所以我有以下代码: $elem.on('keyup',function(e){
我想我已经弄清楚了......请参阅我的评论。抱歉。 我有一个 JSON Web 服务,它在某个 keyup() 事件上调用,该事件根据输入检索一些数据。我想在输入任何内容之前加载一组初始数据。我正在
所以我使用 Keyup 来计算输入字段的总数。到目前为止,一切都很好。但现在我想这样做:如果选中#a 复选框,则将总金额加 12。如果没有,则添加 0。 我的代码基于此:http://jsfiddle
我在弄清楚为什么 keyup 事件在以下情况下不起作用(不显示警报)时遇到问题,我对表单使用 bootstrap 3,但我不认为 form-control取消键盘输入? HTML: jQuery:
我正在构建一个搜索表单,.keyup 中的 ajax 函数可以有不同的参数,我想通过检查是否存在另一个值来检查是否需要包含此参数。这是我现在拥有的: var delay = (function() {
我的 html 和 jquery 代码 Insert title here td { min-height: 50px; min-width: 50px; }
每次我按下键盘上的一个键,它都会将 $(this).val(""); 设置为 null,并且 score 变量将为 -2 . initialize: function() { var scor
我是 javascript 及其事件的新手。这是我的表格 html 代码,其中有收入标题及其各自的价格。 sn Title of income
我有一个这样的表: 当数量/价格变化小计也发生变化时,我想制作Javascript。我的js: $("#invoice_item").delega
我正在 js 中制作字符计数器,但 keyup 事件不起作用??? $(document).ready(function() { function countingCharacter(elemen
我是一名优秀的程序员,十分优秀!