全部,
环境: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/