javascript - $find() 对于定义的 ajax 行为返回 null

标签 javascript asp.net ajaxcontroltoolkit behavior extender

全部,

环境:ASP.NET 2.0、AjaxToolkit build 1.0.20229.0、IE9

我正在使用 $find() 来查找调出扩展程序的行为,以便我可以使用 .show() 方法显式显示。不幸的是,$find() 返回 null。

 $find('my auto generated behvaiour Id').show();

仅供引用:ValidatorCalloutExtender 上的BehaviorID 是使用控件的ClientID 生成的(ClientID_ + "BehaviourID"<- 也是我在 $find() 函数中使用的),因为我在同一页面上有该控件的许多实例.

我查看了渲染的代码,我可以看到要创建的 JS 会创建行为:

Sys.Application.add_init(function() {
$create(AjaxControlToolkit.ValidatorCalloutBehavior ...

$find() 在 UpdatePanel 中回发后执行,并始终返回 null。

编辑(添加): 我创建了新页面,下面是代码,find() 返回仍然为 null,- ASP.NET 2.0 的 Ajax 控件 takelit 中是否存在错误?

<body>
<form id="form1" runat="server">

<asp:ScriptManager ID="ScripManager1" runat="server" EnablePageMethods="True" >

        </asp:ScriptManager>

    <asp:TextBox runat="server" ID="txtInputField" />
    <asp:RequiredFieldValidator runat="server" ID="valInput"
ControlToValidate="txtInputField"
ErrorMessage="ERROR STRING"
Display="none" /> <ajaxToolkit:ValidatorCalloutExtender runat="server" ID="extValInput" TargetControlID="valInput" BehaviorID="myID" />
<asp:Button runat="server" ID="btn" OnClick="btn_click" CausesValidation="True" />

<script type="text/javascript">

        var obj = $find("myID");
        alert(obj);

</script>
</form>

添加: 在 JS 调试器中观察后,我意识到验证器标注扩展器仅在出现错误时出现(动态添加到 DOM),因此,如果没有错误,您将无法找到它。

现在的问题是:如何在显示呼出扩展气球之前重新定位它?真是第22条军规,不显示时你无法访问它,而当它显示时,已经太晚了,因为它显示在错误的位置。

最佳答案

问题的原因是您尝试在页面完成组件初始化之前查找组件。尝试在 Sys.Application.add_load 事件处理程序中访问您的编辑器。我尝试了以下代码,一切正常:

<script type="text/javascript">
    Sys.Application.add_load(function() {
        var obj = $find("myID");
        alert(obj);
    });
</script>

编辑: 解决您最新的问题:如何重新定位它。 Callout ValidatorCalloutExtender 使用 PopupExtender 来显示它。因此,您可以尝试绑定(bind)到弹出扩展程序的“showing”和“shown”事件,然后尝试重新定位标注。

<script type="text/javascript">
    Sys.Application.add_load(function() {
        var callouotComponent = $find("myID");
        var popupBehavior = callouotComponent._popupBehavior;

        popupBehavior.add_showing(function(){alert("I am showing");});
        popupBehavior.add_shown(function(){alert("I was shown");});
    });
</script>

注意:我没有验证此代码,但它可以用作起点。

关于javascript - $find() 对于定义的 ajax 行为返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919363/

相关文章:

php - 通过单击图像来调用我的代码中的 php 函数

javascript - 如何在 html 电子邮件模板中覆盖 gmail 视口(viewport)?

asp.net - http.get 响应对象 - 无法访问 json()?

c# - 如何在 .core mvc 中获取用户及其角色表?

asp.net - (ModalPopupExtender) 两个具有相同id的组件无法添加到应用程序中

javascript - Web - 菜单不响应 1024-1200 范围内的点击

Javascript幻灯片数组问题

php - 从 ASP.NET C# 应用程序使用 PHP web 服务(SOAP、WSDL)-数组问题

asp.net - ModalPopupExtender 不会在 IE7/IE8 兼容模式下呈现在所有内容的前面

asp.net - AjaxFileUpload 选择后自动上传文件