4

我有第三方组件。它是一个日历控件。我有一个客户端事件,它触发 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);
    }


}

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

我有另一种客户端方法,它通过部分回发更新日历。一旦我完成了所有后续的 MouseDowns(rightclicks),它们使用带有“null”的 $find 语句错误。

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

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

有任何想法吗?

4

4 回答 4

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 代码,并可能产生更好的结果。

于 2010-06-11T05:39:43.227 回答
0

jquery 需要在部分页面回发时重新绑定事件

这将帮助你..

于 2010-06-11T06:08:20.523 回答
0

你的意思是菜单= $('#2_menuSharedCalPopUp');

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

在 jQuery 中使用 .find() 是

<div id="parent">
   <div class="child" />
</div>

$('#parent').find('.child'); // useful for cached jQuery objects
于 2010-06-11T05:17:24.327 回答
0

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

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

于 2010-06-11T05:21:57.780 回答