Вопрос

Я использую комбинацию 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 (это 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 %>");
}
Это было полезно?

Решение

Похоже, что $(document).ready в jQuery срабатывает до того, как будут созданы элементы управления Ajax.

Я добился этого с помощью следующего метода JavaScript, который запускается платформой Ajax:

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);
});

А как насчет переопределения функции $find вне document.ready?

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 с атрибуция
Не связан с StackOverflow
scroll top