【发布时间】:2011-02-15 04:43:23
【问题描述】:
我有一个经典的table / thead / tbody 结构,我在 tbody 的末尾添加了一行。该行仅包含一个input 元素。该代码适用于 Firefox 3.6,但不适用于 Chrome v5 或 IE8。我正在使用 jQuery 1.4.2。
不起作用:
$("#" + AJAX_ID).parent().find('tr:last > td:nth-child(2) > input').focus();
有效:
$("#" + AJAX_ID).parent().find('tr:last > td:nth-child(2) > input').css('background-color', 'red');
即使在输入上设置 ID 并使用 document.getElementBuId('id').focus() 也不起作用。
谢谢!
* 编辑 *
该网站非常复杂(模板/静态 html 和动态 html 的混合),但表格 看起来像这样(在 chrome 中呈现 html,通过 tidy 布局):http://pastebin.com/PHqxAEVm
* 编辑 2 *
即使是从 ajax 回调调用的 $("#lectures").find("input:last").focus(); 也不会做任何事情。$("#lectures").find("input:last").css('background-color', 'red'); 虽然会变成红色,但焦点会转到地址栏。
这是从选择器返回的对象的转储: http://pastebin.com/Jdw1TZXf
* 编辑 3 *
这是构建表格的 javascript 代码:http://pastebin.com/cbCfi0UY
在页面加载时,oContainer 是 $("#lectures"),而在 ajax 调用之后它是 $("#" + AJAX_ID).parent(),它应该指向表的 tbody
* 编辑 4 *
难题...这是完整的lectures.js 文件:http://pastebin.com/Jkg0DZqa
batisses 和 compteurs 是通过模板加载的 json 对象。用户选择batisse,然后选择compteur,然后按下调用buildAjout()的按钮,在本例中调用buildElectric($("#lectures"), compteur);。一旦用户填写了该行,就会调用onBlurLecture(tr_parent),通过AJAX将数据发送到服务器,并在ajax调用完成后调用function callback_compteurs_lecture_add(AJAX_ID)。函数SendCommand是一个使用jquery ajax的自定义函数。
第一个输入行(和焦点)的创建有效,但不是在 ajax 回调中创建的那个。
* 编辑 5 *
完整呈现的页面如下所示:http://pastebin.com/UfBYcjX3
我缩短了batisses 变量。 (完整)页面没有 javascript 错误。
在 chrome 的 javascript 控制台中,我无法集中输入。
* 编辑 6 *
SendCommand 在这个问题中的函数名称错误。固定。
找到的解决方案: http://bit.ly/bHd6nH
【问题讨论】:
-
我降级到 1.4.1,
focus()在这些浏览器中对我来说工作正常。一些 HTML 会很好。 -
我在主要问题中添加了渲染 HTML 的转储。哦,对不起,我有 jQuery 1.4.2。
-
嗯,我有一个答案,给出了两个潜在的解决方案,但它被否决了,没有任何解释。我有一种感觉,这是因为我批评了这里的两个答案是不正确的。所以我删除了我的。对不起。
-
@Patrick:我没有给你投反对票,我会接受任何批评,这是另一种学习方式:)......实际上似乎每个人都得到了 -1 没有任何解释,哦好吧。
-
@Sirber - 我会重新上线。
标签: javascript jquery internet-explorer javascript-events google-chrome