0

我正在使用 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 控件”还是“扩展器控件”还是什么?我已经看到它们被称为所有不同的东西。控件具有 ol' MyCompany.MyControl.prototype 声明。

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

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

5 回答 5

2

似乎 jQuery 的 $(document).ready 在构建 Ajax 控件之前触发。

我得到这个工作的方法是使用由 Ajax 框架触发的以下 JavaScript 方法:

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

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

于 2009-10-16T08:26:52.247 回答
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);
});
于 2009-10-15T15:20:38.187 回答
1

在 document.ready 之外重新定义 $find 函数怎么样?

var FIND_FUNCTION = $find;

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

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

于 2009-10-16T01:00:24.240 回答
0

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

var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");

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

var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation")[0];
于 2009-10-15T15:35:17.497 回答
0

这应该有效:

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

或者,如果您在事件处理程序中调用它,那就更好了:

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

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

但是,从外观上看,您不需要使用 find 来执行您正在做的事情。为什么不简单地这样做呢?

$("#elementid")
于 2009-10-15T15:47:11.890 回答