![](/img/trans.png)
[英]Change event not fired when keydown event (TAB key) modifies element value
[英]Change focus following intercept of tab keydown event
我有一个表面上看起来很简单的问题,但是解决方案遇到了一些麻烦。 我正在将asp.net 3.5与jQuery1.8.3和jQuery-confirm一起使用。
在这一点上,我会说javascript和jQuery对我来说还很陌生,我对使用它们并不特别有信心。
我正在拦截文本框上的keydown事件,如果按下了Tab键,则会显示一个jQuery确认对话框。 在对话框执行该操作之后,我希望移至另一个文本框。 看起来很简单,这是我的代码。
$$("m_DiscountTextbox").on('keydown', function (e) {
var key = e.which || e.keyCode;
if (key == 9) {
PromptForDiscount();
document.getElementById($$("m_MarkupTextbox").attr("id")).focus();
}
});
function PromptForDiscount() {
$.confirm({
title: 'Apply global discount',
content: 'Discount will be applied to all line items. Click Confirm to continue, or Cancel to exit.',
boxWidth: '30%',
theme: 'material',
buttons: {
formSubmit: {
text: 'Confirm',
keys: 'enter',
btnClass: 'btn-blue',
action: function () {
ApplyDiscount();
}
},
cancel: function () {
}
},
useBootstrap: false
});
return false;
$$调用选择器函数,该函数使我可以像.net操纵它们之前一样使用asp.net控件的ID。
使用chrome开发人员工具,我可以看到选择器在整个过程中都可以正常工作,甚至可以使用它们来检查目标文本框上的文本。 只是焦点更改不起作用。
最初,焦点转移到目标,并且一旦确认对话框,它将返回到调用文本框。 任何帮助将不胜感激。
提前致谢。
进一步的想法:
我现在想知道是不是对话框在操作完成时将控件传递回原始调用者,并且在此过程中撤消了对下一个文本框的焦点设置。 我尚无证据支持这一点,但似乎可以进行调查。
我还设置了一个基本的jsfiddle来演示该问题: https ://jsfiddle.net/8uap36fp/17/
在此上花了很多时间后,我问了对话框开发者的问题。
事实证明,此对话框的局限性将在以后的版本中解决。 从根本上解决该问题,您可以将对话框的lastFocussed属性设置为不存在的元素。
工作的jsfiddle在这里
感谢Rohith昨天的所有支持。
jsFiddle的代码
function PromptForDiscount() {
$.confirm({
title: 'Test confirm',
content: 'Lets hope this stays open.',
boxWidth: '30%',
buttons: {
formSubmit: {
text: 'Confirm',
keys: 'enter',
btnClass: 'btn-blue',
action: function () {
this._lastFocused = $('.thisElementDoesntExists');
$("#arrivehere").focus();
}
},
cancel: function () {
}
},
useBootstrap: false
});
return false;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.