您好 我有一个包含三个文本框的div,我需要在控件超出div标签时调用一个函数,我不想使用onclick事件,因为按下标签可以将焦点移出div键盘上的键或其他方式。 我还想知道是否有办法使用任何javascript库来实现这一点。
谢谢,这是示例html代码
<html>
<head>
<title>Div Onblur test</title>
<script type="text/javascript">
function Callme() {
alert("I am Called")
}
</script>
</head>
<body>
<div onblur="javascript:Callme();">
<input type=text value ="Inside DIV 1" />
<input type=text value ="Inside DIV 2" />
<input type=text value ="Inside DIV 3" />
</div>
<input type=text value ="Outside DIV" />
</body>
</html>
答案 0 :(得分:10)
您需要将tabindex = 0添加到div中才能获得焦点。 像
这样的东西<div tabindex="-1" onblur="Callme();">
应该这样做。
答案 1 :(得分:9)
您可以将onblur事件处理程序绑定到每个输入元素,并检查处理程序是否有任何焦点(使用document.activeElement)。
<script type="text/javascript">
function checkBlur() {
setTimeout(function () {
if (document.activeElement != document.getElementById("input1") &&
document.activeElement != document.getElementById("input2") &&
document.activeElement != document.getElementById("input3")) {
alert("I am called");
}
}, 10);
}
</script>
<!-- ... -->
<div>
<input type="text" id="input1" value="Inside DIV 1" onblur="checkBlur()" />
<input type="text" id="input2" value="Inside DIV 2" onblur="checkBlur()" />
<input type="text" id="input3" value="Inside DIV 3" onblur="checkBlur()" />
</div>
<input type="text" value="Outside DIV" />
或者,使用jQuery可以简化过程(特别是如果你有很多输入):
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#theDiv input").bind("blur", function () {
setTimeout(function () {
var isOut = true;
$("#theDiv input").each(function () {
if (this == document.activeElement) isOut = false;
});
if (isOut) {
// YOUR CODE HERE
alert("I am called");
}
}, 10);
});
});
</script>
<!-- ... -->
<div id="theDiv">
<input type="text" value="Inside DIV 1" />
<input type="text" value="Inside DIV 2" />
<input type="text" value="Inside DIV 3" />
</div>
<input type="text" value="Outside DIV" />
编辑:我将事件处理程序包装在setTimeout
中,以确保其他元素有时间聚焦。
答案 2 :(得分:4)
我在div中使用了3个文本框的类似场景中使用了以下jQuery脚本:
<script type="text/javascript">
$(document).ready(function () {
$("jQuerySelectorToGetYourDiv").focusout(function (e) {
if ($(this).find(e.relatedTarget).length == 0) {
// Focus is now outside of your div. Do something here.
// e.Target will give you the last element within the
// div to lose focus if you need it for processing.
}
});
});
</script>
答案 3 :(得分:2)
<html>
<head>
<title>Div Onblur test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
function Callme() {
alert("I am Called");
}
$(function() {
var callme;
$('#onblur-callme input')
.focus(function() {
callme = false;
})
.blur(function() {
callme = true;
setTimeout(function() {
if (callme) {
Callme();
}
}, 1);
});
});
</script>
</head>
<body>
<div id="onblur-callme">
<input type="text" value ="Inside DIV 1" />
<input type="text" value ="Inside DIV 2" />
<input type="text" value ="Inside DIV 3" />
</div>
<input type="text" value ="Outside DIV" />
</body>
</html>
答案 4 :(得分:0)
也许“onChange”活动会更好地满足您的需求。我无法想到点击DIV的情况,而不是输入字段。