jQuery .on()无效,而.live()表现不错

时间:2013-04-05 19:51:48

标签: jquery

我有这个:

$("#socialsLogin").on("click", function() {
    var login = $("#socialsLoginField").val();
    var passwd = $("#socialsPasswordField").val();
    SocialsStart(login, password);
});

而且:

<a href="javascript:void(0)" id="socialsLogin" class="button">Disconnected</a>

我的点击事件没有开始 - 我做错了什么?如果我用.live()更改.on(),一切正常。但我不想使用.live(),因为它已被弃用(是的,我使用的是jquery 1.9)

修改:这不重复。当我使用$(document).on("click", "#socialsLogin", function() {时,它可以在页面上的任何位置工作 - 我可能会点击图像并启动它。绝对不是预期的。 $(document.body).on("click", "#socialsLogin", function() {对我来说根本不起作用。

编辑2:这是我的小提琴:http://jsfiddle.net/JeDLW/1/

2 个答案:

答案 0 :(得分:2)

要替换live,请使用on,如下所示:

 $(document.body).on("click", "#socialsLogin", function() {

jQuery集接收事件,然后将其委托给与作为参数给出的选择器匹配的元素。这意味着与使用live时相反,执行代码时jQuery集元素必须存在。

请注意,此绑定代码应在ready回调中执行:

$(function() {
     $(document.body).on("click", "#socialsLogin", function() {
         ...
     });
});

编辑:

正如我所怀疑的那样,您的小提示表示您使用了多个ID为"socialLogin"的元素。那就是问题所在。更改字段集的ID。

答案 1 :(得分:2)

试试这样:

$(document).on("click", "#socialsLogin", function() {
    var login = $("#socialsLoginField").val();
    var passwd = $("#socialsPasswordField").val();
    SocialsStart(login, password);
});

或者你可以简单地使用它:

$("#socialsLogin").click(function () {
    var login = $("#socialsLoginField").val();
    var passwd = $("#socialsPasswordField").val();
    SocialsStart(login, password);
});