将jquery事件从aspx传递给ascx

时间:2010-10-22 14:01:03

标签: jquery html ajax asp.net-4.0

昨天我开始使用ascx并开始将我的“动态”default.aspx页面切成更小的部分。

在我的default.aspx中,我有很多处理不同事件的JavaScript / jquery代码。当我从.aspx中删除一些html代码,同时将javascript保留在default.aspx中,并将其放入.ascx时,jquery事件停止工作,我是否必须编写一些特殊内容以便我的JavaScript可以访问我的usercontrol中的html?

由于 中号

3 个答案:

答案 0 :(得分:0)

客户端JavaScript不了解ascx。 ascx在发送到浏览器之前包含在页面中,因此浏览器只将其视为单页。

JavaScript更有可能停止工作,因为它无法找到具有特定id或类的元素。这可能是由于多种原因而发生的,例如元素实际上已丢失或.net已动态更改了id。

答案 1 :(得分:0)

我的网页包含也包含其他用户控件的用户控件。 我对事件和具有此结构的页面呈现堆栈有同​​样的问题。为了解决这个问题,我将用户控件特定事件管理放在一个单独的.js文件中,例如mycontrol.js,并在.ascx文件中引用.js(将链接放在那里)。

我还有一种情况,即在放入标记(子控件)之前我没有渲染用户控件,因此无法在那时放置事件。我通过在我的javascript中加载用户控件javascript来处理这个问题:

/* function to allow inclusion of other files 
Included this way to allow addition AFTER the page renders the control - that is, fake inclusion in this file
*/
function includeJS(jsPath)
{
    var script = document.createElement("script");
    script.setAttribute("type", "text/javascript");
    script.setAttribute("src", jsPath);
    document.getElementsByTagName("head")[0].appendChild(script);
};
includeJS('Js/secondusercontrol.js');
  • 用户控件的单独脚本代码和用户控件中的链接
  • 如果延迟是个问题,请使用脚本包含.js文件
  • 将所有“基础”脚本和全局对象(如果需要)放在页面.js文件
  • 使用.live()和.delegate()

编辑:另一个可能适合您的选项我最初忘记使用.live()和/或.delegate()功能。

答案 2 :(得分:0)

考虑到当你将它们放在用户控件中时,元素ID会从Control1等变为ctl00stuff_Control1