焦点到DOM元素不起作用

时间:2013-11-12 18:09:49

标签: javascript jquery marionette

我在木偶视图上有这个功能

onShow: function(){
            // $('#boxId').val("I am here");
            $('#boxId').focus();

        }

当我使用$('#boxId').val("I am here");时效果很好,元素的值为I am here。但是当我尝试专注于那个元素时,它不起作用,它不会集中注意力。不知道是什么问题?

我也试过

<input type="text" class="input_txt" id="boxId" maxlength="8" onload="$('#boxId').focus()">

onShow: function(){;
             $(document).ready(function(){
                    $('#boxId').focus();

                });
        }

但它也没有用。

最后解决了:

onShow: function(){
              setTimeout(function(){
                        $('#boxId').focus();
                    },1000);
        },

4 个答案:

答案 0 :(得分:2)

我同意setTimeout不是最好的解决方案,并且还表明你试图在它存在之前访问该元素。

如果您使用深层嵌套的布局和视图,我发现onShow方法的行为很奇怪。可能发生的情况是,如果在层次结构中的任何一点,您在布局的.show()中调用onRender,那么该布局的每个子视图都会立即响应该特定{{1}触发的“show” }。这意味着可以在DOM子树准备好或插入DOM之前调用这些视图'show()方法。

如果你正在做很多深度嵌套的观看,我会仔细检查并确保你只是在布局'onShow()方法中调用.show()

答案 1 :(得分:0)

请改用:$('#boxId')[0].focus()

答案 2 :(得分:0)

我很好奇聚焦标签是否有效?尝试聚焦输入而不是? 你是否在正确的时间呼叫焦点?您是否尝试在ready或settimeout或body onload上的文档中执行此操作

$(document).ready(function(){
 $('#myBox').focus();
});

  setTimeout(function(){
    $('#myBox').focus();
  },1000);

 <body onload="$('#myBox').focus();">

http://api.jquery.com/focus/

- 请注意,准备好的文档会随机进入页面并在页面加载时运行

<input type="text" id="selectMe"/>
<script>
    $(document).ready(function(){
     $('#selectMe').focus();
    });
</script>

答案 3 :(得分:0)

如果您使用setTimeout,我猜您在元素可用之前就致电$('#boxId').focus(); - 您的<script>高于<input>

在几乎所有情况下,您都应该在关闭正文标记<script>之前放置</body>标记。这有很多原因,防止这类问题就是其中之一。