我一直在使用实时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.js 和 http://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);
}
});
答案 0 :(得分:3)
你忘了关于其中每一项的结束)
。当语法正确时,.on()
函数可以正常工作。
现有元素 -
$(".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");
});