我在一个我无法修改的网站框架内工作。此框架在document.ready()之后的某个时刻向DOM添加了一个文本框。我想给这个文本框重点。
jQuery的live
,delegate
和on
不合适,因为它们需要将事件作为触发器。我找不到相当于只将项目添加到页面的事件。
有LiveQuery,但框架不允许我加载它。
有没有办法模拟LiveQuery或者有人能想到的更好的替代方案?我很乐意能够做到:
$(document).ready(function() {
//create an input in the future
setTimeout('insertInput()', 1200);
//give that input focus when it is added
$('#foo').live('load', function() {
$(this).focus();
});
});
function insertInput() {
$('body').append('<input type="text" value="new" id="foo" />');
}
答案 0 :(得分:0)
这是给你的新jsfiddle ......这是你的意思吗? http://jsfiddle.net/QsbU4/3/我刚刚更改了insertInput函数。您不再需要live
部分。
答案 1 :(得分:0)
作为一个说明,我知道轮询是一种糟糕的方式来做到这一点,但我有限制在其中工作。我无法控制插入元素的js,我只能使用jQuery 1.4.2。
我最终依靠民意调查。这就是我选择这样做的方式。我给出了最大的尝试次数和合理的轮询时间,这样我就不会在页面上乱窜了。如果元素在前三秒内没有出现,我放弃了。
//poll for appearance of element
var attempts = 10;
var pollTime = 300;
modifyTree();
function modifyTree() {
if ($('#foo').length > 0) {
//do something to foo
}
else {
//continue polling for element
if (attempts--) { setTimeout('modifyTree()', pollTime);} }
}