2014-09-05 41 views
0

简单的代码:为什么我不能附加焦点事件,但可以对文本框的模糊事件?

jQuery(document).ready(function() { 
    var txtAtm = jQuery("#txtAtm"); 
    txtAtm.on("focus", function() { 
    alert("Focus!"); 
}); 

//txtAtm.blur(function() { 
// alert("Blur!"); 
//}); 

    txtAtm.on("blur", function() { 
    alert("Blur!"); 
    }); 

}); 

模糊代码工作正常,焦点代码不!有任何想法吗??

如果我将活动更改为focusin,它可以工作,但捕获Tab键也会移动框的内容!

表单是一个带有以下标记的webform,我正在用jQuery替换内联标记(它工作!!),只是想确认我可以捕获事件! (在第一关失败!!):

 <asp:TextBox ID="txtAtm" runat="server" CssClass="withUnit" 
      AutoPostBack="true" CausesValidation="true" ValidationGroup="prv">not set</asp:TextBox> 

呈现的HTML是一种看起来像一个WebForm控制标准自动过帐代码:

<input name="ctl00$leftContent$ctl07$txtAtm" type="text" value="not set" 
    onchange="javascript:setTimeout('WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$leftContent$ctl07$txtAtm&quot;, &quot;&quot;, true, &quot;prv&quot;, &quot;&quot;, false, true))', 0)" 
    onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" 
    id="txtAtm" class="withUnit"> 
+0

他们都不应该工作,因为你需要在jQuery中使用clientId - 例如'$('#<%= txtAtm.ClientId%>') – Pete 2014-09-05 14:34:34

+0

@Pete:显示的* rendered * id显然已经是正确的对于代码:'id =“txtAtm”' – 2014-09-05 14:37:18

+0

啊对不起,我读了这个名字作为id--通常这就是如何将id与asp控件一起呈现 – Pete 2014-09-05 14:39:03

回答

0

感谢您的超级快速解答,它看起来像是一个计时问题!看起来“准备好”不是“准备好”!以下代码有效:

jQuery(document).ready(function() { 
///<summary> 
/// Replaces the inline markup 
///</summary> 

var txtAtm = jQuery("#txtAtm"); 

setTimeout(function() { 
    txtAtm.on("focus", function() { 
     txtAtm.select(); 
     //alert("Focus!"); 
    }) 
}, 1000); 


txtAtm.on("blur", function() { 
    //alert("Blur!"); 
    initBox(this.id, 'not set'); 
}); 

txtAtm.on("click", function() { 
    txtAtm.select(); 
}); 

});

恼人的是,脚本ref也在页面的末尾,所以你会期望最小的时间问题!

1

onkeypress事件你使用return false这是造成你的代码不起作用。

如果你删除它,它会开始工作,如你所愿。

+0

由于该代码是通过ASP注入的,所以最好提示他删除。 – 2014-09-05 14:42:46

+0

是的,这种想法也超出了我的想法 - MVC向我招手的另一个原因! – mmacneill123 2014-09-05 14:56:56