Pergunta

Estou usando uma combinação de jQuery e iScriptControls e não parece ser capaz de usar o $ Find em nenhuma função jQuery.

Veja o seguinte, por exemplo, eu posso usar $ get e $, mas não posso usar $ 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");

        }
    );

Quando minha página é carregada, preciso chamar um método que precisa obter a guia selecionada do meu controle da guia MainNavigigation (é um Ultrawebtab infragístico, mas eu testei com meus próprios controlos de iScript para garantir que isso não seja um problema de infragística).

O índice da guia só pode ser obtido usando $ find. Qual é o motivo pelo qual não posso usar o $ Find e como posso controlar o controle de uma moda?

// Configure the toolbar groups
$(document).ready(function()
    {

        // Get the UltraWebTab Control
        var tabControl = $find("<%=uwt_MainNavigation.ClientID %>");
        var index = tabControl.get_selectedTab();
        ToolBarShowGroup(index);

    }
);

O exposto acima é o que estou tentando fazer, onde o ToolBarShowgroup chama uma função jQuery para mostrar e ocultar barras de ferramentas.

Além disso, enquanto ouço, se alguém poderia corrigir minha terminologia onde se trata de controles do iScript. Eles são 'controles de Ajax' ou 'controles de extensor' ou o quê? Eu os vi chamados de coisas diferentes. Os controles têm as declarações de myCompany.myControl.prototype.

EDITAR: O seguinte funciona perfeitamente, mas eu prefiro estar dentro da função $ (documento) .ready.

// Use the Ajax Load Methods
function pageLoad()
{
    var ajaxControl= $find("<%=myControlHere.ClientID %>");
}
Foi útil?

Solução

Parece que o $ (documento).

A maneira como consegui funcionar foi usar o seguinte método JavaScript, que é demitido pela estrutura do Ajax:

function pageLoad()
{
    // $find() works in here
}

Pageload () dispara após $ (documento) .ready, então parece que quando a função de JQuery dispara para dizer que o documento está pronto ... na verdade não está tudo pronto?

Outras dicas

Parece que você está usando jQuery com outras bibliotecas que também redefinem o $ função. Você poderia usar o Sem conflito função que força você a sempre usar jQuery ao invés de $.

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

Que tal redefinir a função $ find fora do documento.

var FIND_FUNCTION = $find;

$(document.ready) { 
   ...
   var result = FIND_FUNCTION("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
}

Isso deve corrigir o problema do escopo que você parece estar tendo.

Não tenho certeza de por que você está tendo esse problema, mas por que você não usa o objeto jQuery? Curti:

var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");

Ou se você deseja o objeto DOM em vez do objeto jQuery, você pode escrever como:

var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation")[0];

Isso deve funcionar:

$(document).find("#elementid")

Ou se você está chamando isso dentro de um manipulador de eventos, isso é ainda melhor:

$(this).find("#elementid")

Eu acho que a ideia com a função de localização é encontrar descendentes de controle dos pais. E, portanto, parece não funcionar se você não especificar o pai.

No entanto, pela aparência, você não precisa usar o que está fazendo. Por que não simplesmente fazer isso?

$("#elementid")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top