【问题标题】:Issue with jquery #find on partial postbackjquery #find 在部分回发时出现问题
【发布时间】:2010-06-11 05:11:18
【问题描述】:

我有一个第三方组件。它是一个日历控件。我有一个客户端事件,它触发 javascript 以显示弹出菜单。我在客户端做所有事情,所以我可以使用 MVC。

dd

   function MouseDown(oDayView, oEvent, element) {

    try {

        e = oEvent.event;

        var rightClick = (e.button == 2);
        if (rightClick) 
        {
            var menu = $find("2_menuSharedCalPopUp");
            menu.showAt(200, 200, e);
        }


    }
    catch (err) {
        alert("MouseDown() err: " + err.description);
    }


}

最初使用 $find 可以完美触发 javascript。

我有另一个客户端方法,它通过部分回发更新日历。完成此操作后,所有后续 MouseDowns(rightclicks) 都会使用 $find 语句错误和“null”。

人们在回发后遇到的所有类似问题似乎都在调用 javascript - 解决方案是使用 PageRequestManager 重新注册事件或在服务器上注册客户端函数 - 等等。

但是,事件正在触发,并且 javascript 工作 - 似乎是 DOM 中的引用存在问题。

有什么想法吗?

【问题讨论】:

    标签: jquery asp.net-mvc postback partial


    【解决方案1】:

    我将尝试阐明这个问题:

    1. $find 不是 jQuery 方法,尽管它可能看起来像一个。它来自 ASP.NET Ajax,用于在客户端查找 ASP.NET Ajax 组件。正确的用法是不带“#” - 在大多数情况下,它需要组件的 ID,即 ClientID 服务器属性。
    2. 我认为您可能正在使用基于 ASP.NET Ajax 的第 3 方组件库。这个库很可能不支持执行 Ajax 的 MVC 方式。 MVC Ajax 不能作为 ASP.NET Ajax 工作 - 它不充当 UpdatePanel 并且不执行局部视图中的脚本标记。因此,日历组件永远不会初始化,并且 $find 会正确返回 null

    什么给了?我建议您尝试使用 jQuery ajax 加载部分视图。它可以正确执行任何嵌入的 JavaScript 代码,并可能产生更好的结果。

    【讨论】:

    • 谢谢。你是对的 - 控件没有明确支持 MVC,但到目前为止我已经成功地使用了更复杂的控件。我必须禁用视图状态,并且只按照他们的方向使用他们的(丰富的)客户端模型。他们甚至提供脚本管理器作为其基础库的附加组件。
    • 感谢您对 $ 语法的解释。我以为是 jquery ;-) 我现在正在尝试所有建议。
    • 我们有一个赢家......谢谢大家......不过只是为了惹恼你 - 我确实让它与 var menu = $find("");我意识到我正在将我的 MVC 部分回发(工作得很好)与 ASP NET Ajax 语法混合在一起......困惑 - 我是......
    【解决方案2】:

    你的意思是 menu = $('#2_menuSharedCalPopUp'); 吗?

    $find 根本没有在你的函数中声明。

    在 jQuery 中使用 .find() 是

    <div id="parent">
       <div class="child" />
    </div>
    
    $('#parent').find('.child'); // useful for cached jQuery objects
    

    【讨论】:

    • 如果是这样的话,第一次就不行了?我的意思是它应该在那里,但它为什么第一次起作用是个谜。 :)
    • 谢谢丹,但这确实有效,#find 的使用是我在别处找到的简化代码 sn-p..
    【解决方案3】:

    从局部视图调用返回时,您是否检查过姓名和 ID?可能是id变了。

    如果是这种情况,则给控件命名为“MyCalendar”,然后使用$find(".MyCalendar");

    【讨论】:

      【解决方案4】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 2013-10-31
        • 2010-11-10
        • 1970-01-01
        • 2011-11-29
        • 2014-03-02
        • 1970-01-01
        相关资源
        最近更新 更多