$(function(){...中只有第一个有效的多个jQuery事件

时间:2011-02-09 16:26:27

标签: jquery

我的页面有多个.click()事件,但只有第一个按预期执行。

$(function () {
    $("#delete").click(function () {
        $(this).hide();
        $("span.hconf").show();
    })
    $("#div_conf_true").live("click", function () {
        $.post("/u:" + $("span.username").text() + "/delete/"), {
            url_id: $("#div_conf_true").attr("u"),
            uname: $("span.username").text(),
            complete: window.location.reload(true)
        }
    })
    $("#div_conf_false").live("click", function () {
        $("span.hconf").hide();
        $("#delete").show();
    })
})

最初#div_conf_ *事件是.click(function(){events,但我读到任何DOM更改都会取消绑定这些处理程序,所以我尝试了.live,但它仍然无效。我需要什么在这个脚本中做什么来通过DOM更改来访问所有三个点击事件?

我是jQuery的新手如此赦免,如果这有明显的答案。


编辑:第二个或第三个.click()事件都不起作用。我已经实现了响应者建议的语法和缩进更正,但仍然没有变化。上面的代码块是我脚本标记中的所有内容。我需要用其他东西包裹块吗?这是$ document.ready()的问题吗?我错误地使用了.live()吗?这是错误的方法选择吗?我在Chrome JS控制台中没有错误。

我主要担心的是,根据我的理解,第三个.click()函数应该简单地反转第一个.click()函数的效果,该函数按预期运行。我已粘贴下面的相关HTML。

<div id='modify'><a class='modify' id="edit" href='{{ edit_url }}'>edit</a> | <a class='modify' id="delete" u="{{ i.id }}" href='#'>delete</a><span class='hconf' style="display:none">Are you sure? <a class='confirm' id='del_conf_true' href='#'>yes</a> | <a class='confirm' id='del_conf_false' href='#'>no</a></span></div>

编辑2:我更新了第二个.click()函数,但功能仍未改变。

$("#div_conf_true").live("click", function ( {
$.post("/u:"+$("span.username").text()+"/delete/", 
        {
            url_id:$("#div_conf_true").attr("u"), 
            uname:$("span.username").text()
        },
        function() {window.location.reload(true);}
    );
    })

2 个答案:

答案 0 :(得分:5)

$(function () {
    $("#delete").click(function () {
        $(this).hide();
        $("span.hconf").show();
    })
    $("#div_conf_true").live("click", function () {
        $.post("/u:" + $("span.username").text() + "/delete/"), { // <-. remove ) here
            url_id: $("#div_conf_true").attr("u"),                //   |
            uname: $("span.username").text(),                     //   |
            complete: window.location.reload(true)                //   |
        }                                                         // <-' and place here
    })
    $("#div_conf_false").live("click", function () {
        $("span.hconf").hide();
        $("#delete").show();
    })
})

这一行是您的问题,请在)之后删除/delete/,否则您将关闭.post()。然后将 >括号放在突出显示的行上。

答案 1 :(得分:0)

我在重新阅读Google Javascript API文档后解决了这个问题,并意识到我没有在我的脚本中实现google.setOnLoadCallback()。虽然代码存在一些问题,但代码并没有引起我在这里寻求解决的更大问题。