2010-09-05 82 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

相關問題