为什么我不能在jQuery函数中使用$ find?

时间:2009-10-15 14:48:17

标签: asp.net jquery terminology iscriptcontrol

我正在使用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问题。)< / p>

只能使用$ 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 Controls'还是'Extender Controls'还是什么?我看到他们被称为所有不同的东西。控件具有'MyCompany.MyControl.prototype声明。

编辑:以下工作完美无缺,但我宁愿它在$(document).ready函数内部。

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

5 个答案:

答案 0 :(得分:2)

似乎jQuery的$(document).ready在Ajax控件构造之前就已经触发了。

我的工作方式是使用Ajax框架触发的以下JavaScript方法:

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

pageLoad()在$(document).ready之后触发,所以看起来当jQuery的函数触发说文档准备好了......它实际上还没准备好了吗?

答案 1 :(得分:1)

您似乎正在使用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);
});

答案 2 :(得分:1)

如何在document.ready

之外重新定义$ find函数
var FIND_FUNCTION = $find;

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

这应该可以解决您似乎遇到的范围问题。

答案 3 :(得分:0)

我不确定你为什么会遇到这个问题,但为什么不直接使用jQuery对象呢? 像:

var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");

或者如果你想要DOM对象而不是jQuery对象,你可以写成:

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

答案 4 :(得分:0)

这应该有效:

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

或者如果你在事件处理程序中调用它,那么这更好:

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

我认为使用find函数的想法是找到父控件的后代。因此,如果您没有指定父级,它似乎不起作用。

然而,从它的外观来看,你不需要使用find来做你正在做的事情。为什么不简单地这样做?

$("#elementid")