Почему я не могу использовать $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")
Другие вопросы по тегам