从jquery live切换到on不起作用

时间:2015-01-15 14:45:39

标签: javascript php jquery html

我一直在使用实时jquery方法并且它到目前为止一直在工作,但是我读到了我弃用的实时方法并被"替换为"。

我有几个标题都属于同一个类但具有不同的ID。 当clickng其中一个标题我想打开一个对话框。在下面的示例中,我已使用简单警报替换了jquery对话框。页面的html代码是使用php动态生成的。

为了记录,我在Chrome的javascript控制台中收到错误。 它说Uncaught TypeError:undefined不是函数jquery:16。 另外,我从一个从文档就绪调用的函数中调用下面的代码。

这很好用。

$(".antennaCursor").live("click", function() {
   alert("Hi");
});

这不起作用

$(".antennaCursor").on("click", function() {
   alert("Hi");
});

这也不是。

$(document).live("click", ".antennaCursor", function() {
   alert("Hi");
});

这不起作用。

我包含了最新的jquery版本。 http://code.jquery.com/jquery-1.11.2.jshttp://code.jquery.com/ui/1.11.2/jquery-ui.min.js

有没有人有任何建议如何解决这个问题?

编辑:此处更新了代码,因为它缺少一些结束的parentheis和半冒号。但真正的代码是正确的。

以下是代码的调用方式。

$(document).ready(function() {
  handleTheClickEvent();
});

function handleTheClickEvent() {
   $(".antennaCursor").on("click",function() {
      alert("Hi");
   });
}

编辑:使用代码我已经意识到代码可能存在其他问题,这些问题是" on"的问题的根本原因。方法。这是代码的更新。异常处理会随机抛出一个错误" TypeError:undefined不是函数"。代码中是否存在导致" on"的问题?方法问题?

$( ".antennaCursor" ).live("click",function() {
try {
    var data_id = $(this).attr("id");

    url = "http://192.168.0.10/wiki/GetInformation.php?data1"+data_id+"&type=somedata";

    dial=$("<div id='dialog2' style='text-align:left; width:auto; overflow:auto'></div>");
    dial.attr("title","Data information: " + $(this).attr("id"));
    dial.html('Fetching data! <img id="graph" src="/wiki/progress.gif" />');

    dial.dialog({ position: "left"});
    dial.dialog( "option", "width", 600 );
    $.get(url,{
    getmacroinfo : $(this).attr("id"), infotype : "draw"
    }, function(data){
      if ( $( "#accordion" ).data("ui-accordion") )  {      
      $( "#accordion").accordion("destroy");
      $( "#accordion").empty();
      $( "#accordion").remove();
      }
      dial.html(data);

    });


    dial.dialog( "open" );
    return false;
} catch (err) {
    alert(err);
}
});

4 个答案:

答案 0 :(得分:3)

你忘了关于其中每一项的结束)。当语法正确时,.on()函数可以正常工作。

example

现有元素 -

$(".antennaCursor").on("click", function() {
   console.log("Hi");
});

活动授权 -

$(document).on('click', '.antennaCursor', function() {
    console.log('Hi');
});

许多人使用document作为捕获起泡事件的地方,但没有必要在DOM树上走得那么高。理想情况下you should delegate to the nearest parent that exists at the time of page load.

答案 1 :(得分:1)

你错过了结束

);

现在有效。

$(".antennaCursor").on("click", function() {
   alert("Hi");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="antennaCursor">Click</div>

答案 2 :(得分:0)

如果动态添加元素,您将需要此语法以确保元素触发该函数。

$(document).on('click', 'selector', handler);

这与您的上一个建议相同,但on代替live。此外,您错过了最终)

所以在你的情况下会是:

$(document).on("click", ".atennaCursor", function() {
  alert("Hi");
})

答案 3 :(得分:-1)

这只是一个错字。其他答案并非100%正确,它们的确与“直播”的工作方式不同 这应该按预期工作,现在和将来的活动

$(document).on("click", ".antennaCursor", function() {
   alert("Hi");
});