部分回传中jquery #find存在问题

4
我有一个第三方组件,它是一个日历控件。我在客户端上有一个事件,它会触发JavaScript来显示一个弹出菜单。我所有的操作都在客户端上完成,这样我就可以使用MVC。
   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 最初可以正常运行。

我有另一个客户端方法,通过部分后台回发更新日历。一旦我这样做了,所有后续的MouseDown(右键单击)使用 $find 语句时都会出现“null”错误。

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

然而,事件正在触发,javascript 正在工作 - 问题似乎是 DOM 中的引用问题。

有什么想法吗?

4个回答

1

我会尝试解决这个问题:

  1. $find 不是 jQuery 的方法,尽管它看起来像是。它来自于 ASP.NET Ajax,并用于在客户端查找 ASP.NET Ajax 组件。正确的使用方式是不需要 "#" - 它需要组件的 ID,在大多数情况下是 ClientID 服务器属性。
  2. 我认为你可能正在使用基于 ASP.NET Ajax 的第三方组件库。很可能这个库不支持 MVC 的 Ajax 方式。MVC Ajax 不像 ASP.NET Ajax 那样工作 - 它不作为 UpdatePanel 并且不执行部分视图中的脚本标签。因此,日历组件从未初始化,$find 正确地返回 null

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


谢谢。你说得对 - 这些控件并没有明确支持MVC,但是到目前为止,我已经成功地使用了更复杂的控件。根据他们的指示,我必须禁用视图状态,并且只使用他们(丰富的)客户端模型。他们甚至提供了一个脚本管理器作为他们基础库的附加组件。 - anonymous
谢谢关于$syntax的解释。我一开始以为它是jquery ;-)现在我正在尝试所有建议。 - anonymous
我们有一个赢家...谢谢大家...只是为了惹恼你们 - 我已经用以下代码使其工作:var menu = $find("<%= menuSharedCalPopUp.ClientID %>");我意识到我正在混合使用MVC部分回发(非常顺利)和ASP NET Ajax语法...我很困惑... - anonymous

0
你的意思是菜单 = $('#2_menuSharedCalPopUp');吗?
在你的函数中根本没有声明$find。
在jQuery中使用.find()。
<div id="parent">
   <div class="child" />
</div>

$('#parent').find('.child'); // useful for cached jQuery objects

如果是这样的话,那第一次就不会起作用了吧?我的意思是它应该在那里,但为什么第一次能够正常工作还是个谜。 :) - griegs
谢谢Dan,但这并没有起作用,而且使用#find是我在其他地方找到的简化代码片段。 - anonymous

0

你在从部分视图调用返回时检查了名称和ID吗?可能是ID已更改。

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



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接