Question

J'utilise une combinaison de jQuery et IScriptControls et je ne semble pas être en mesure d'utiliser trouver $ dans toutes les fonctions jQuery.

Prenez ce qui suit, par exemple, je peux utiliser $ obtenir et $, mais je ne peux pas utiliser trouver $.

    // 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");

        }
    );

Quand mes charges de page Je dois appeler une méthode qui a besoin d'obtenir l'onglet sélectionné de mon contrôle la navigation principale Tab (Il est un Infragistics UltraWebTab, mais j'ai testé avec mes propres IScriptControls pour assurer que ce n'est pas un problème Infragistics).

L'index de tabulation ne peut être obtenue en utilisant $ trouver. Quelle est la raison pour laquelle je ne peux pas utiliser $ et trouver comment puis-je obtenir le contrôle d'une manière de trouver de $?

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

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

    }
);

Ce qui précède est ce que je suis en train de faire, où ToolBarShowGroup appelle une fonction jQuery pour afficher et masquer les barres d'outils.

En outre, alors que je l'entends, si quelqu'un pourrait corriger ma terminologie où il s'agit de contrôles iScript .. sont-ils « Ajax Controls » ou « Extension » des contrôles ou quoi? Je les ai vus appelés choses toutes différentes. Les contrôles ont des déclarations de MyCompany.MyControl.prototype l'ol.

EDIT : les travaux suivants parfaitement, mais je préfère qu'il était à l'intérieur du $ (document) Fonction .ready

.
// Use the Ajax Load Methods
function pageLoad()
{
    var ajaxControl= $find("<%=myControlHere.ClientID %>");
}
Était-ce utile?

La solution

Il semble que les incendies de jQuery .ready $ (document) avant que les contrôles Ajax sont construits.

La façon dont je suis arrivé ce travail était d'utiliser la méthode JavaScript suivant qui est tiré par le framework Ajax:

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

pageLoad () après les incendies $ (document) .ready, il semble donc que lorsque les feux de la fonction de jQuery pour dire le document est prêt ... il est pas vraiment tout prêt?

Autres conseils

Il semble que vous utilisez jQuery avec d'autres bibliothèques qui redéfinissent également la fonction $. Vous pouvez utiliser la fonction noConflict qui vous oblige à toujours utiliser jQuery au lieu 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);
});

Qu'en est-il redéfinir la fonction de recherche de $ en dehors de document.ready

var FIND_FUNCTION = $find;

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

cela devrait résoudre le problème de la portée que vous semblez avoir.

Je ne suis pas sûr pourquoi vous avez ce problème, mais pourquoi ne pas simplement utiliser l'objet jQuery à la place? Comme:

var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");

Ou si vous voulez que l'objet DOM au lieu de l'objet jQuery, vous pouvez écrire que:

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

Cela devrait fonctionner:

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

Ou si vous appelez à l'intérieur d'un gestionnaire d'événement alors ceci est encore mieux:

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

Je pense que l'idée de la fonction de recherche est de trouver des descendants d'un contrôle parent. Et il ne semble pas fonctionner si vous ne spécifiez pas le parent.

Cependant, des regards, vous n'avez pas besoin d'utiliser pour trouver ce que vous faites. Pourquoi ne pas simplement faire?

$("#elementid")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top