假设我将一个blur函数附加到HTML输入框,如下所示:
blur
<input id="myInput" onblur="function() { ... }"></input>
有没有一种方法可以获取导致blur事件触发的元素(在该元素中被单击)在该函数内部的ID ?怎么样?
例如,假设我的跨度是这样的:
<span id="mySpan">Hello World</span>
如果在输入元素具有焦点之后立即单击范围,则输入元素将失去其焦点。函数如何知道它是mySpan被单击的?
mySpan
PS:如果跨度的onclick事件发生在输入元素的onblur事件之前,那么我的问题将得到解决,因为我可以设置一些状态值来指示已单击特定元素。
PPS:此问题的背景是,我想从外部(从可单击元素)触发AJAX自动完成器控件以显示其建议,而这些建议不会由于blur输入元素上的事件而立即消失。因此,我想检查blur函数是否已单击一个特定元素,如果已单击,请忽略模糊事件。
嗯…在Firefox中,您可以explicitOriginalTarget用来拉出被单击的元素。我希望toElement对IE也能做到这一点,但似乎无法正常工作…但是,您可以从文档中拉出新集中的元素:
explicitOriginalTarget
toElement
function showBlur(ev) { var target = ev.explicitOriginalTarget||document.activeElement; document.getElementById("focused").value = target ? target.id||target.tagName||target : ''; } ... <button id="btn1" onblur="showBlur(event)">Button 1</button> <button id="btn2" onblur="showBlur(event)">Button 2</button> <button id="btn3" onblur="showBlur(event)">Button 3</button> <input id="focused" type="text" disabled="disabled" />
警告: 这种技术并 没有 对重点工作的变化所造成 的互联 通过与键盘领域,并没有在所有的Chrome或Safari工作。使用的一个大问题activeElement(IE除外)是未持续更新,直到 之后 的blur事件已被处理,并在处理过程中可能根本没有有效的价值!可以通过更改Michiel最终使用的技术来缓解这种情况:
activeElement
function showBlur(ev) { // Use timeout to delay examination of activeElement until after blur/focus // events have been processed. setTimeout(function() { var target = document.activeElement; document.getElementById("focused").value = target ? target.id||target.tagName||target : ''; }, 1); }
这应该在大多数现代浏览器(在Chrome,IE和Firefox中测试)上都可以使用,但要注意的是,Chrome不会将重点放在 单击的按钮上 (相对于选项卡式)。