Ada*_*ood 7 javascript asp.net user-controls
我已经看到类似的问题和答案,但似乎没有解决问题.
我在更新面板中有一个用户控件.在我的用户控件里面我输出了javascript.
触发时javascript不会触发.如果我将javascript移动到usercontrol/updatepanels之外的父页面,则会触发它.这样做是没有意义的,因为我不能在没有重复代码的情况下在另一个页面上使用此usercontrol ...通过复制整个javascript(不同的站点)或在每个页面中添加对.js文件的引用在(同一地点).它的便携性更低
我只想用控件输出javascript(在更新面板内).
我提到了updatepanel的准确性.即使我将usercontrol放在updatepanels之外,它也不起作用.
保持简单(这对我不起作用):
用户控件:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="_location.ascx.cs" Inherits="_location" %>
<script type="text/javascript">
function test() {
alert('Hello World!');
}
</script>
<a href="javascript:void(0);" onclick="javascript:test();">
Find For Me
</a>
Run Code Online (Sandbox Code Playgroud)
家长:
<uc1:_location runat="server" ID="_location" />
Run Code Online (Sandbox Code Playgroud)
在chrome中调试告诉我"Uncaught ReferenceError:test not defined"
如果我将javascript直接添加到onclick,如下所示,它可以工作:
onclick="alert('Hello World!');"
Run Code Online (Sandbox Code Playgroud)
如上所述,将函数移动到父页面也可以.
就像浏览器忽略用户控件的脚本输出一样.
有任何想法吗?
当你有一个UpdatePanel并且UpdatePanel更新它的内容时,它将它的内容视为简单的text/html(而不是代码),它没有任何可用于运行脚本并使其可用于页面的解析器.
所以这个内容,
<script type="text/javascript">
function test() { alert('Hello World!'); }
</script>
<a href="javascript:void(0);" onclick="javascript:test();">
Find For Me
</a>
Run Code Online (Sandbox Code Playgroud)
在更新面板的客户端代码运行并更新页面内容之后,不会解析脚本部分 - 页面的简单文本/ html.
然而这部分运行
<a href="javascript:void(0);" onclick="alert('Hello World!');">Find For Me</a>
Run Code Online (Sandbox Code Playgroud)
因为onclick当你点击它时就完成了属性的解析.
有以下可用的解决方法: