【问题标题】:JQuery Async postback issue, how do I fix this?JQuery 异步回发问题,我该如何解决?
【发布时间】:2010-10-02 18:30:57
【问题描述】:

我有以下 JQuery 代码,它执行类似 Stackoverflow 的功能,其中用户单击评论链接并显示 cmets,或者在这种情况下回复成员的状态更新,通常它工作得很好,除非成员发布新的在 ASP.net MVC 中使用 ajax 异步回发更新状态更新列表的状态更新。

如果您单击列表中的新项目,则会将它们带到一个新页面,而不是执行 JQuery 应该执行的操作。

<script type="text/javascript">

    $(function() {
        $("a[id ^='commentLink-']").click(function() {
            match = this.id.match(/commentLink-(\d+)/);
            container = $("div#commentContainer-" + match[1])
            container.toggle();

            if (container.is(":visible")) {
                container.load($(this).attr("href"));
            } else {
                container.html("Loading...");
            }
            return false; //Prevent default action
        });
    });
</script>

注意:我认为导致它的原因是列表中的新项目实际上不在页面上,因为列表是通过 ajax 更新的,所以新的 html 不是直到页面被刷新。

更新好的,我将如何使用 Paolo Bergantino 在他的回答中提到的这种实时/事件功能来触发 ASP.net MVC ActionResult?

【问题讨论】:

    标签: javascript jquery asp.net-mvc


    【解决方案1】:

    查看 jQuery 1.3 中的新 Events/live 功能

    将处理程序绑定到所有当前和未来匹配元素的事件(如点击)。

    因此,当您添加新项目时,jQuery 应该使用 this 向它们添加点击事件。

    如果出于某种奇怪的原因不想升级到 jQuery 1.3,可以查看livequery 插件。

    编辑以响应更新

    使用.live 的实际代码是这样的:

    $(function() {
        $("a[id ^='commentLink-']").live('click', function(event) {
            match = this.id.match(/commentLink-(\d+)/);
            container = $("div#commentContainer-" + match[1])
            container.toggle();
    
            if (container.is(":visible")) {
                container.load($(this).attr("href"));
            } else {
                container.html("Loading...");
            }
            event.preventDefault();
        });
    });
    

    所做的更改主要在第二行,其中

    $("a[id ^='commentLink-']").click(function() {
    

    被替换为

    $("a[id ^='commentLink-']").live('click', function(event) {
    

    我现在也收到event 用于event.preventDefault(); 的参数,这是建议您通过jQuery 停止事件的方式。不过,如果 return false; 成功了,你可以保留它。

    我还没有使用.live,但我认为这应该可以解决问题。不过,请确保在尝试之前在服务器中安装了 jQuery 1.3。 :)

    【讨论】:

    • 是的,这看起来不错,但问题是,DOM 元素实际上并不存在......所以这就是混淆 Jquery 的原因
    • 你的意思是这些元素实际上并不存在?我认为问题在于,当用户输入新的状态更新并将其添加到页面时,点击处理程序无法正常工作,它只是表现为常规链接?
    • 对,但列表是通过 ASP.net MVC ajax actionresult 更新的,因此如果您查看页面的源代码,除非您按 F5 刷新页面,否则这些新更新实际上仍然存在...
    • 如果元素正在动态更新,它们将不会显示在源代码中(除非您使用 Web Developer 插件在 Firefox 中使用“查看生成的源代码”)但如果您在页面中实际看到它们这就是你需要的。否则我很困惑。
    • 不,你是对的......我是那个困惑的人......回答我这个问题,那么我将如何使用这个实时事件来触发 MVC ActionResult?
    猜你喜欢
    • 2021-03-27
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2019-03-27
    • 2019-02-13
    • 2020-03-25
    相关资源
    最近更新 更多