jQuery代码适用于控制台但不适用于页内

时间:2010-04-01 15:55:34

标签: jquery asp.net-mvc forms

我有一个表单元素定义为:

<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助手来生成输入,这可能会使进程有些复杂化 - 但即便如此......当代码在控制台中而不是在“实时”页面时,我看到了正确的行为。

我该如何解决这个问题?

2 个答案:

答案 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)