2010-09-05 84 views
3

我有以下的功能,适用水印文字的文本框的页面上的ID "Search"

jQuery(document).ready(function ($) { 

    $("#Search").watermark({ 
     watermarkClass: 'watermarkOn', 
     defaultText: $("#Search").attr("watermarkText") 
    }); 
}); 

我遇到的问题是,这并没有得到应用的时候我异步加载包含文本框的面板,因为它发生在已经触发的jQuery(document).ready函数中。

有什么我可以做的,以确保任何异步加载文本框应用于他们的这个功能?谢谢。

+0

如何加载元素?另外,你有'id =“Search”''多个元素吗? – 2010-09-05 15:23:37

回答

3

如果您使用$(selector).load(),然后调用回调的.watermark()

$('someSelector').load('/some/path', function(response) { 
    $('someNewElement').find('input').watermark({ 
     watermarkClass: 'watermarkOn', 
     defaultText: $("#Search").attr("watermarkText") 
    }); 
}); 

如果选项都一样,可以将它们存储在一个变量中以便重用。

var options = { 
      watermarkClass: 'watermarkOn', 
      defaultText: $("#Search").attr("watermarkText") 
      }; 

$("#Search").watermark(options); 

$('someSelector').load('/some/path', function(response) { 
    $('someNewElement').find('input').watermark(options); 
}); 
+0

在异步加载内容后找到调用它的方法。即使它没有加载(),但是你正在做这件事,它将有一种方法可以在脚本成功完成时执行代码。 – 2010-09-05 15:26:24

0

查找.live()方法来将事件绑定到之前或将来创建的元素,如同您的情况一样异步。

编号:http://api.jquery.com/live/

它可能会改变watermark插件/方法,你必须使用.live()

.live()只会事件工作,它不会让你附加插件元素这将在未来创建。

为此,您可以查看liveQuery插件,该插件将允许您将插件附加到可能在将来创建的元素。

例如。

//initiate the watermark plugin on all elements with class 'search' existing now or created in the future. 
    $('.Search').livequery(function() { 
     $(this).watermark({ 
      watermarkClass: 'watermarkOn', 
      defaultText: $("#Search").attr("watermarkText") 
     }); 
    }); 
+2

'.live()'不适用于插件,它是基于事件的。 – 2010-09-05 15:24:14

+3

即使你的编辑,这不是如何工作......我不认为这听起来粗鲁,虽然它会,*没有*答案比错误的更好,你已经发布了许多这样的过去几天。 – 2010-09-05 15:27:32

+0

@尼克 - 没有进攻搭档。我发布了更多的错误答案。你能指出你做出的“很多”吗? – 2010-09-05 16:20:08

相关问题