簡體   English   中英

為什么我不能在jQuery函數中使用$ find?

[英]Why can I not use $find in a jQuery function?

我正在使用jQuery和IScriptControls的組合,但似乎無法在任何jQuery函數中使用$ find。

以下面的示例為例,我可以使用$ 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 Tab控件中獲取選定的選項卡(這是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 %>");
}

看來在構造Ajax控件之前會觸發jQuery的$ {document).ready。

我進行此工作的方法是使用Ajax框架觸發的以下JavaScript方法:

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

在document.ready之外重新定義$ find函數呢?

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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM