我有两个要素:
<input type="text" name="pmTo" id="pmTo" onkeyup="offerSuggs('none');" onfocus="showSelect();" onblur="hideSelect();" />
和一个动态创建的(这是自动建议程序的全部):
$suggString .= '<div name="'.$value.'" id="'.$value.'" class="suggMouseOver" onmouseover="highlightDivs(this);" onmouseout="blurDivs(this);" onclick="fillInput(this);">'.$value.'</div>';
好,然后有事件函数分别对应于输入元素的onblur
和div元素的onclick
:
function hideSelect() {
offerSuggs('checkFinal');
document.getElementById('nameSugg').style.display="none";
}
function fillInput(elemName) {
document.getElementById('pmTo').value=elemName.id;
}
编辑:如何获得onclick
在他们单击的元素上正确触发,而没有onblur
事件先隐藏div从而使onclick
失去意义?但是,当文本框失去焦点时,我仍然想保留建议div消失的功能。
我认为您的答案很短,因为您的问题令人困惑。大概您有一个输入,当重点关注时,它会根据输入到输入中的字符显示一个建议列表。
接受的答案可以作为一种快速解决方案,但是您可以依靠setTimeout
来假设用户在放开鼠标之前只会持续按下n
毫秒以内(只是想让某人犹豫一下而已) 。为了更确定单击是否成功,您可以设置更长的超时时间,但这意味着您的可隐藏元素在模糊之后将保持可见的时间更长。
解决方案非常简单-您只需要使用mousedown