[英]Why can I not use $find in a jQuery function?
我正在使用jQuery和IScriptControls的組合,但似乎無法在任何jQuery函數中使用$ find。
以下面的示例為例,我可以使用$ get和$,但不能使用$ find。
// Configure the toolbar groups
$(document).ready(function()
{
// Returns the control
var works1 = $get("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
var works2 = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");
// Returns null
var broken = $find("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
}
);
加載頁面時,我需要調用一個方法,該方法需要從MainNavigation Tab控件中獲取選定的選項卡(這是Infragistics UltraWebTab,但是我已經使用自己的IScriptControls進行了測試,以確保這不是Infragistics問題)。
選項卡索引只能通過使用$ find獲得。 為什么不能使用$ find的原因是什么?如何以$ find的方式獲得控件?
// Configure the toolbar groups
$(document).ready(function()
{
// Get the UltraWebTab Control
var tabControl = $find("<%=uwt_MainNavigation.ClientID %>");
var index = tabControl.get_selectedTab();
ToolBarShowGroup(index);
}
);
以上是我正在嘗試做的事情,其中ToolBarShowGroup調用jQuery函數來顯示和隱藏工具欄。
另外,雖然我聽到,但是有人可以糾正有關IScript控件的術語嗎?它們是“ Ajax控件”還是“擴展控件”? 我已經看到它們被稱為所有不同的事物。 控件具有“ MyCompany.MyControl.prototype”聲明。
編輯 :以下工作完美,但我希望它在$(document).ready函數內。
// Use the Ajax Load Methods
function pageLoad()
{
var ajaxControl= $find("<%=myControlHere.ClientID %>");
}
看來在構造Ajax控件之前會觸發jQuery的$ {document).ready。
我進行此工作的方法是使用Ajax框架觸發的以下JavaScript方法:
function pageLoad()
{
// $find() works in here
}
pageLoad()在$(document).ready之后觸發,因此看來當jQuery的函數觸發說文檔已准備好……實際上還沒准備好嗎?
看來您正在將jQuery與其他庫一起使用,這些庫也重新定義了$
函數。 您可以使用noConflict函數,該函數強制您始終使用jQuery
而不是$
。
jQuery.noConflict();
// Configure the toolbar groups
jQuery(document).ready(function() {
// Returns the control
var works1 = $get("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
var works2 = jQuery("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");
// Returns null
var broken = $find("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
});
jQuery(document).ready(function() {
// Get the UltraWebTab Control
var tabControl = $find("<%=uwt_MainNavigation.ClientID %>");
var index = tabControl.get_selectedTab();
ToolBarShowGroup(index);
});
在document.ready之外重新定義$ find函數呢?
var FIND_FUNCTION = $find;
$(document.ready) {
...
var result = FIND_FUNCTION("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
}
這應該可以解決您似乎遇到的范圍界定問題。
我不確定為什么會有這個問題,但是為什么不只使用jQuery對象呢? 喜歡:
var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");
或者,如果您想要DOM對象而不是jQuery對象,則可以編寫為:
var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation")[0];
這應該工作:
$(document).find("#elementid")
或者,如果您在事件處理程序中調用它,那就更好了:
$(this).find("#elementid")
我認為使用find函數的想法是查找父控件的后代。 因此,如果您不指定父級,它似乎就不起作用。
但是,從外觀上看,您無需在執行操作時使用find。 為什么不簡單地這樣做呢?
$("#elementid")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.