【问题标题】:Putting focus on a textbox in onchange event将焦点放在 onchange 事件中的文本框上
【发布时间】:2010-01-19 22:54:07
【问题描述】:

我正在尝试获取它,以便在将某个值放入文本框时,焦点将停留在文本框上(并且在生产中将显示警报)。我试图让它在 Firefox 3.5.7 中工作,但没有运气。

当文本框在onchange 处具有特定值时,我怎样才能使它保持焦点/重新焦点在文本框上?

实时示例位于http://jsbin.com/ipina

<body>
Enter your name: <input type="text" name="fname" id="fname" onchange="
  if(this.value=='foo'){
    this.select();
    this.focus();
  }
  "  />
</body>

另外,在执行此代码时,我在错误控制台中没有收到任何 javascript 错误或警告。

【问题讨论】:

  • 您是否要强制焦点停留在该文本框上?如果用户改变它,它不会有焦点吗?
  • 不,在控件失去焦点之前不会调用 onchange 事件(在 firefox 和 IE 中用于文本框)

标签: javascript events textbox focus onchange


【解决方案1】:

onchange 事件被触发时,用户将注意力集中在文本框上。

如果值为 'foo',您可能希望使用 blur 事件重新关注文本框。

如果您需要即时结果,您应该使用onkeyup

<body>
Enter your name: <input type="text" name="fname" id="fname" onkeyup="
  if(this.value=='foo'){
    this.select();
    this.focus();
  }
  "  />
</body>

【讨论】:

  • 我需要输入整个值,然后才能评估文本框是否应该保持焦点。
【解决方案2】:

根据Javascript onchange different in IE and FireFox,我需要在 onchange 事件发生后设置焦点,所以我不得不以这样的方式结束:

Enter your name: <input type="text" name="fname" id="fname" onblur="
  if(this.value=='foo'){
    alert('bah');
    setTimeout('document.getElementById(\'fname\').focus();document.getElementById(\'fname\').select();',0);
  }
  "  />

而且我必须在焦点丢失时捕捉它,不一定是在文本更改时,所以我不得不使用 onblur 而不是 onchange。

直播:http://jsbin.com/ofeva

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多