截断tab keydown事件

时间:2017-03-16 18:53:15

标签: javascript jquery

我面对它似乎是一个简单的问题,但是我在解决方案方面遇到了一些麻烦。我正在使用带有jQuery1.8.3和jQuery-confirm的asp.net 3.5。

在这一点上我会说javascript和jQuery对我来说相当新,我对使用它们并不是特别自信。

我正在拦截文本框上的keydown事件,如果按下了tab键,我会显示一个jQuery-confirm对话框。在对话框的操作之后,我希望移动到另一个文本框。看似简单,这是我的代码。

$$("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;

$$调用一个选择器函数,它允许我使用asp.net控件的id,因为它们之前.net会破坏它们。

使用chrome开发人员工具我可以看到选择器在整个工作过程中,甚至使用它们来检查目标文本框上的文本。只是焦点变化无效。

最初焦点转到目标,一旦确认对话框,它就会恢复到调用文本框。任何帮助都将受到赞赏。

提前致谢。

进一步的想法:

我现在想知道在操作完成时是否将控制权传递回原始调用者并且在此过程中撤消焦点设置在下一个文本框上。我还没有证据支持这一点,但看起来它可能是调查的候选人。

我还设置了一个基本的jsfiddle来演示这个问题: https://jsfiddle.net/8uap36fp/17/

1 个答案:

答案 0 :(得分:0)

花了很多时间在这上面我问了对话开发者的问题。

事实证明,这是对话框的限制,将在未来版本中解决。基本上解决此问题,您可以将对话框的lastFocussed属性设置为不存在的元素。

工作的jsfiddle是here

感谢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;
};