2013-06-24 60 views
1

我有下面的代码。点击没有触发一次从。对

$(document).on('click','#container.pagination .active', function(){ 

        var page = $(this).attr('p'); 
        loadData(page); 
       }); 

改变返回的

Uncaught TypeError: Object # has no method 'on'

错误,我发现一旦我关闭JQuery用户界面1.9.0它使用JQuery 1.8。 2,问题将得到解决。但JQ UI是我的项目的重要组成部分,因此无法从页面中删除。

我尝试了一种替代方案,可以帮助我在不使用.on的情况下实现相同的结果,但似乎甚至没有触发它。有没有语法错误? 我换成

$(document).on('click','#container.pagination .active', function(){ 

$('#container .pagination .active').click(function(){ 

所以,现在它是这样的:

$('#container .pagination .active').click(function(){ 
        alert(loadData(page)); 
       //$(document).on('click','#resultBox .pagination .active', function(){ 
        var page = $(this).attr('p'); 
        loadData(page); 

        //echo $page; 
       }); 

但是,函数甚至没有触发...

是否有当我在这个senario中使用.on VS .click时有所不同,那就是其功能失调的原因是什么?

=========故障排除=================== 这里有点更新的进一步信息,我的发现通过浏览器Chrome的错误报告:

Uncaught TypeError: Object #<Object> has no method 'on' jq_iface_testScores_with_pagination.js:176 
(anonymous function) jq_iface_testScores_with_pagination.js:176 
c.extend.ready jquery.tools.min.js:38 
L jquery.tools.min.js:45 

难道这意味着它也与jQuery工具交易以及....这是越来越疯狂...... 请帮助。

====最新发现 - 实际发现!如何解决它?============ 由于以前的错误发现,实际问题奠定了JQ工具1.2使用JL1.7.2。我认为它与我的JQ1.9.1的.on函数有矛盾。我尝试了多个页面。经过测试,即使简单地加载JQTool 1.2也会导致问题,甚至无法使用它。 如何在不删除jquerytool 1.2的情况下解决此问题?每次都返回相同的错误消息。

==解决方案====== smerny的持续帮助 后,我来到了一个决议,即最后,问题实际上是处理过时jquery.tool库问题是由于jq.tool lib是1.2.3而不是1.2.7导致的。有时候,事情很简单,但要花很长时间去理解和探索。

Aagain,谢谢smerny!这是你的代表你应得的:)

谢谢!

+1

如果带有class .active的元素是动态添加的,那么使用on绑定的事件将起作用,并且点击事件将不会绑定 – karaxuna

+0

'click(...)'是on(“click”,...的快捷方式。 )',但是当你在'on()'中添加上下文时,它会产生变化...尝试用'$(“body”)替换'$(document)'' – smerny

+0

谢谢Karaxuna!那么,有没有其他的选择,而不使用.on,同时达到相同的效果?谢谢! –

回答

3

的差异

之间
$(document).on('click','#container .pagination .active', function(){ 

$('#container .pagination .active').click(function(){ 

的是,在第一个,它使用了代表团。这意味着在进行绑定之前,选择器中的元素不必在那里。

在第二个,元素将需要在绑定之前在那里。

如果$(document)不能正常工作,请尝试选择体来代替:

$("body").on('click','#container .pagination .active', function(){ 

这只是必要的,如果你是动态在某些时候加载这些元素......如果他们马上加载,然后我倒是假设你只需要来包装你的代码在一个$(document).ready(function() { ... })块:

$(document).ready(function() { 
    $("body").on('click','#container .pagination .active', function(){ 
    ... 
}); 
0

这些都是可能的选项:

$(selector).live(events, data, handler); // jQuery 1.3+ 
    $(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
    $(document).on(events, selector, data, handler); // jQuery 1.7+ 
+1

他已经在使用1.7+,升级到1.7+,他已经在使用'on() – smerny