我在VS 2010中使用3.5框架运行的网站项目中使用第三方控件(是的,我需要将其升级到4.0但我很懒)。第三方控件具有可以使用javascript处理的各种客户端事件。例如,它有一个OnClientDoubleClick事件:
<myUserCtrl:SpecialView ID="ucSpecialView" runat="server" OnClientDoubleClick="myDoubleClick">
</myUserCtrl:SpecialView>
和随附的javascript类似:
<script type="text/javascript" language="javascript">
function myDoubleClick(sender, args) {
// and we do whatever we need to in here
}
</script>
我正在使用的是高级页面,我上面的javascript位于子页面的标题内容持有者中(基本上我说我在正确的位置有javascript而且我还没有把它放在某个地方的我的页面中间)。
我的问题: 使用IE的开发者工具(在菜单栏中找到或通过按F12),如果我尝试在浏览器模式设置为“Internet Explorer 7”的情况下查看网页,则会出现javascript错误。
Microsoft JScript运行时错误:'myDoubleClick'未定义
但是,如果我通过将浏览器模式设置为“Internet Explorer 8”来查看网页,那么我没有看到javascript错误和控制功能(包括javascript函数myDoubleClick)。
这是我的第三方控件的问题(我是否需要联系我的供应商并将其弄错)?或者我的代码有问题吗?我已经做了大量的谷歌搜索和搜索我的代码,我似乎无法想出任何东西。
修改 似乎另一个开发人员已经包含了一些在母版页中运行的javascript函数。所述函数都在一个脚本标签内,该标签本身位于div标签内,原因我不确定(虽然div标签的runat属性设置为“server”,所以我怀疑它是因为脚本标签正在拉一些客户端ID出于某种原因)。在任何情况下,这都是非常不正统的,因为脚本标记周围的div标签位于标头标签内(即 - div标签不属于标头标签)。这似乎是罪魁祸首。我做了一些测试,发现如果我将myDoubleClick函数放在masterpage中的脚本标记中,那么javascript错误不会像以前那样在页面加载时发生。但是,这不是一个可行的解决方案,因为我的javascript函数还会提取子网页控件的各种客户端ID,因此必须位于子网页的内容占位符中。
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
<script type="text/javascript" language="javascript">
function myDoubleClick(sender, args) {
if (confirm("Are you sure you want to delete this node?")) {
$get("<%= btnDeleteNode.ClientID %>").click(); //full postback for delete node
}
}
</script>
</asp:Content>
答案 0 :(得分:1)
我认为你需要改变
OnClientDoubleClick="myDoubleClick"
到
OnClientDoubleClick="myDoubleClick()"
答案 1 :(得分:1)
渲染的HTML可能不包含方法调用中的参数,因此从函数中删除sender, args
。