有谁知道为什么jQuery .focus函数会导致onblur事件被调用。 我问的原因是在我的JavaScript自定义伪课程中,我称之为。
jQuery(thisTemp.Elements.TxtSampleId).blur(Function.createDelegate(thisTemp,
thisTemp.PreAccessioningLoad));
但是在成功的JavaScript函数(在同一类中)中,我有这个代码,用于我的WCF服务的AJAX调用。 *.focus 行导致调用上面的委托的另一个实例。 我可以通过注释来证明这一点。 有了这条线,我的警报被调用了两次。 没有它,我的警报只会被调用一次。
PreAccessioningLoadSuccess: function(quickDataEntryObject) {
var val = jQuery(this.Elements.TxtSampleId).val().replace(/^ss*/, "").replace(/ss*$/, "");
var intRegex = /^d{1,10}$/;
if (!intRegex.test(val)) {
jQuery(this.Elements.SampleIdAjaxValidate).html("<span style='color:red'>Sample Id must contain between 1 and 10 digits</span>");
jQuery(this.Elements.TxtSampleId).focus();
jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
alert("this alert gets called twice when .focus() function called ???");
return false;
}
else {
jQuery(this.Elements.SampleIdAjaxValidate).html(""); // clear AJAX validation
}
。
为什么会这样呢?
============这是我根据请求的委托事件:
PreAccessioningLoad: function(sender) {
if (this.Elements.TxtSampleId.value != "") {
var service = new Acu.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService();
jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "visible");
service.PreAccessioningLoad(this.Elements.TxtSampleId.value, Function.createDelegate(this, this.PreAccessioningLoadSuccess), Function.createDelegate(this, this.PreAccessioningLoadError));
}
return false; //prevent page postback
},
===============================================添加我的源代码:
<asp:TextBox>
<script type="text/javascript">
function Change(obj, evt) {
if (evt.type == "focus") {
obj.style.borderColor = "black";
obj.style.backgroundColor = "#90EE90"; // light green on focus
}
else if (evt.type == "blur") {
obj.style.borderColor = "white";
obj.style.backgroundColor = "#7AC5CD"; // light blue on blur
}
}
</script>
听起来问题是警报触发了模糊(因为它现在正在接收焦点):
alert("this alert gets called twice when .focus() function called ???");
看:
http://jsfiddle.net/on50g7cr/2/
如果您按 Tab 键转到"焦点"按钮,然后单击"单击我!",您将看到模糊事件触发了两次(一次是失去对"单击我"按钮的焦点,然后是失去对警报窗口的焦点)。