我有一个表单元素定义为:
<div class="field">
<div class="name">
<label for="User_LastName">
Last name: <span class="asterisk">*</span></label>
</div>
<div class="value">
<%= Html.TextBox("User.LastName", Model.LastName)%>
<%= Html.ValidationMessage("User.LastName")%>
</div>
</div>
和一个jQuery选择器,它应该检测输入何时获得焦点并突出显示父节点:
$("input").focus(function() {
//watching for an event where an input form comes into focus
$(this).parent().addClass("curFocus").children("div").toggle();
});
如果我将此代码粘贴到firebug的控制台中 - 事情按计划进行。但是,我是从'RenderPartial'.net mvc页面运行的。其他jQuery代码位于相同的$(document).ready(function(){块正常工作。
表单使用html助手来生成输入,这可能会使进程有些复杂化 - 但即便如此......当代码在控制台中而不是在“实时”页面时,我看到了正确的行为。
我该如何解决这个问题?
答案 0 :(得分:3)
当你渲染部分时,$("input")
选择器找不到要对其进行装配的元素,因为它还没有。如果您将其更改为直播活动,则会对document.ready
执行后添加的元素起作用。
要解决此问题,请使用.live()
,如下所示:
$("input").live('focus', function() {
$(this).parent().addClass("curFocus").children("div").toggle();
});
注意:需要jQuery 1.4.1 +
答案 1 :(得分:0)
使用setTimeOut
setOut(function(){
$("input").focus(function() {
//watching for an event where an input form comes into focus
$(this).parent().addClass("curFocus").children("div").toggle();
});
},500)