【问题标题】:Pass jquery events from aspx to ascx将 jquery 事件从 aspx 传递到 ascx
【发布时间】:2010-10-22 14:01:02
【问题描述】:

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

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

谢谢 M

【问题讨论】:

    标签: jquery html ajax asp.net-4.0


    【解决方案1】:

    考虑到元素 ID 从 Control1 之类的东西变为 ctl00stuff_Control1 当您将它们放在用户控件中时

    【讨论】:

    • 是的,还有 :) 在某些情况下,我通过使用 class 而不是 id 来解决这个问题。
    • 你似乎是对的,一切都改为:filter1_ 嗯,糟透了:)
    • 如果你使用 jquery,一个肮脏的修复将在你的选择器中使用 $("[id$=lala]") 而不是 $("#lala")
    【解决方案2】:

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

    JavaScript 停止工作的可能性更大,因为它找不到具有特定 id 或类的元素。发生这种情况的原因有很多,例如元素实际上丢失或 .net 动态更改了 id。

    【讨论】:

    • 所有 id 似乎都是一样的:/
    • 所以ID已经动态改变了? ;-)
    【解决方案3】:

    我的页面包含的用户控件也包含其他用户控件。 对于具有这种结构的事件和页面渲染堆栈,我遇到了同样的问题。为了解决这个问题,我将用户控件特定的事件管理放在单独的 .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() 功能。

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 2013-09-08
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      相关资源
      最近更新 更多