【问题标题】:How to access the Event Object in focusout Event Handler如何在 focusout 事件处理程序中访问事件对象
【发布时间】:2014-09-22 14:12:07
【问题描述】:

很抱歉问了这么简单的问题。我正在学习 Javascript 和 jQuery。

我有一个弹出窗口,其中包含 3 个输入字段,即 ETD、ETA 和持续时间。我正在尝试从 ETD 和 ETA 计算 focusout 的持续时间,并且会有一个 AjaxCall,我们在其中进行计算和其他工作。 问题是每当我按下 Tab 键(聚焦在 ETD 或 ETA 之外)时,焦点都会移出弹出窗口并移至主窗口。

我正在尝试将焦点集中在这些输入字段上,以确保 ajax 调用成功。 我正在尝试使用标志来实现这一点,例如,如果在 ETD 上发生了焦点,那么 ETDFlag 将为真,我将在 ajax 调用的onsuccess 上检查这个标志,所以如果 ETDFlag 为真,我将专注于 ETA 等等在, 但问题是即使我通过单击字段外的焦点离开字段,焦点也会转到下一个字段,所以我只需要在按下 Tab 键时设置标志。

下面是示例代码:

$("#ETD").focusout( function (event) {  
    var keyCode=event.keyCode || event.which;
    if(keyCode == 9){
        ETD= true;
        ETA= false;
    }       
    calculateDuration();

当我尝试alert(event); 时,我没有得到事件对象,输出是[object Object]

但是类似:

警报(e.target.id)

将显示字段的 id。例如预计到达时间

请帮助并告诉我出了什么问题。我是 Javascript 新手,所以无法理解。

为进一步澄清而编辑

目标是在用户按下 Tab 按钮时转到下一个输入。如前所述,当前行为是在按下 tab (focusout) 后,将发生一个 ajax 调用来计算持续时间字段值,并且焦点将从弹出窗口移到主窗口! 所以拥有事件对象的主要目的是获取Tab按钮的keycode:

 var keyCode=event.keyCode || event.which;
 If(keyCode==9)   //tab key code
 {Then make some flag true}

但是在按下 Tab 键时它永远不会进入 if 条件!

为进一步澄清而编辑 2

var keyCode=event.keyCode || event.which;

我尝试在 keyup 事件中使用上述代码,“keyCode”能够捕获几乎所有的键除了 Tab 键

【问题讨论】:

  • 你已经知道了。你可以说alert(event.target.id)
  • 您希望发生什么?
  • @SLakes 添加注释以进行澄清
  • @andrex : 添加注释以便更清楚地说明,拥有事件对象的目标是解决选项卡问题
  • @SohailAnwer 您的问题是关于访问事件对象的。你已经在访问它了,我的朋友。如果条件你已经得到了所有东西,那么调用 ajax 把它放在你里面,那么有什么问题呢?

标签: javascript jquery ajax jquery-events jquery-focusout


【解决方案1】:

您正在获取事件对象。

alert() 会将其参数转换为字符串。
jQuery 的event 对象不会覆盖toString(),所以你会得到[object Object] 的默认值。

【讨论】:

    【解决方案2】:

    我认为你需要 keyup 或 keydown 而不是 focusout 然后你做你的过程。

    $(document).ready(function(){ 
       $("#ETD").bind('keydown', function (event) {  
          if(event.keyCode == 9){
              alert('its a tab');
              // you do your process here
          }       
       });
    });
    

    SEE DEMO

    Focusout 不是键盘事件,因此您无法从中获取任何键码。 详细了解 keyboard events here

    【讨论】:

    • 好吧,我知道它适用于 keyup 和 keydown 事件,但为什么不适用于 focusout !!?
    猜你喜欢
    • 2010-12-06
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多