如何模仿jQuery插件LiveQuery?

时间:2011-09-06 17:24:30

标签: jquery

我在一个我无法修改的网站框架内工作。此框架在document.ready()之后的某个时刻向DOM添加了一个文本框。我想给这个文本框重点。

jQuery的livedelegateon不合适,因为它们需要将事件作为触发器。我找不到相当于只将项目添加到页面的事件。

有LiveQuery,但框架不允许我加载它。

有没有办法模拟LiveQuery或者有人能想到的更好的替代方案?我很乐意能够做到:

http://jsfiddle.net/psJmx/1/

$(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" />');
}

2 个答案:

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