假设我在一个HTML输入框上附加了一个模糊函数,如下所示:

<input id="myInput" onblur="function() { ... }"></input>

是否有一种方法来获得导致模糊事件的元素的ID(被点击的元素)在函数内?如何?

例如,假设我有这样一个张成的空间:

<span id="mySpan">Hello World</span>

如果我在输入元素有焦点之后点击span,输入元素将失去它的焦点。该函数如何知道被单击的是mySpan ?

PS:如果跨度的onclick事件发生在输入元素的onblur事件之前,我的问题就解决了,因为我可以设置一些状态值,指示特定的元素已被单击。

PPS:这个问题的背景是,我想从外部触发一个AJAX自动补全控件(从一个可点击的元素)来显示它的建议,而不会因为输入元素上的模糊事件而立即消失建议。因此,我想检查是否有一个特定的元素被单击了模糊函数,如果是这样,忽略模糊事件。


当前回答

你可以这样做:

<script type="text/javascript">
function myFunction(thisElement) 
{
    document.getElementByName(thisElement)[0];
}
</script>
<input type="text" name="txtInput1" onBlur="myFunction(this.name)"/>

其他回答

2015答案:根据UI Events,你可以使用事件的relatedTarget属性:

用于标识与焦点相关的次要EventTarget 事件,这取决于事件的类型。

对于模糊事件,

relatedTarget:事件目标接收焦点。

例子:

函数blurListener(事件){ event.target.className = '模糊'; 如果(event.relatedTarget) event.relatedTarget.className = 'focused'; } [].forEach.call(document.querySelectorAll('input'), function(el) { 埃尔。addEventListener('blur', blurListener, false); }); .模糊{背景:橙色} .集中{背景:lime} <p>模糊的元素将变成橙色 <p>聚焦的元素应该变成石灰 <input /><input /><input />

注意Firefox直到48版才支持relatedTarget (bug 962251, MDN)。

你能把你检查的内容和时间颠倒过来吗?如果你还记得上次模糊的内容:

<input id="myInput" onblur="lastBlurred=this;"></input>

然后在你的span的onClick中,用两个对象调用function():

<span id="mySpan" onClick="function(lastBlurred, this);">Hello World</span>

然后,函数可以决定是否触发Ajax。自动完成控件。该函数有点击对象和模糊对象。onBlur已经发生了,所以它不会让建议消失。

可以这样说:

var myVar = null;

然后在函数内部:

myVar = fldID;

然后:

setTimeout(setFocus,1000)

然后:

function setFocus(){ document.getElementById(fldID).focus(); }

最后的代码:

<html>
<head>
    <script type="text/javascript">
        function somefunction(){
            var myVar = null;

            myVar = document.getElementById('myInput');

            if(myVar.value=='')
                setTimeout(setFocusOnJobTitle,1000);
            else
                myVar.value='Success';
        }
        function setFocusOnJobTitle(){
            document.getElementById('myInput').focus();
        }
    </script>
</head>
<body>
<label id="jobTitleId" for="myInput">Job Title</label>
<input id="myInput" onblur="somefunction();"></input>
</body>
</html>

你可以这样做:

<script type="text/javascript">
function myFunction(thisElement) 
{
    document.getElementByName(thisElement)[0];
}
</script>
<input type="text" name="txtInput1" onBlur="myFunction(this.name)"/>

可以使用mousedown事件的文档代替模糊:

$(document).mousedown(function(){
  if ($(event.target).attr("id") == "mySpan") {
    // some process
  }
});