Почему я не могу использовать $find в функции jQuery?
Я использую комбинацию jQuery и IScriptControls и не могу использовать $find в любых функциях jQuery.
Возьмем, к примеру, следующее: я могу использовать $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 (это UltraWebTab Infragistics, но я протестировал свои собственные 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 %>");
}
5 ответов
Похоже, что $(document).ready jQuery срабатывает до создания элементов управления Ajax.
Я получил эту работу, чтобы использовать следующий метод JavaScript, который запускается фреймворком Ajax:
function pageLoad()
{
// $find() works in here
}
pageLoad () запускается после $(document).ready, поэтому кажется, что когда функция jQuery срабатывает, чтобы сказать, что документ готов... он на самом деле не все готов?
Как насчет переопределения функции $find за пределами document.ready
var FIND_FUNCTION = $find;
$(document.ready) {
...
var result = FIND_FUNCTION("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
}
это должно решить проблему с областью видимости, которая у вас, кажется, есть.
Кажется, вы используете 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);
});
Я не уверен, почему у вас возникла эта проблема, но почему бы вам просто не использовать вместо этого объект 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")