Javascript 如何让事件绑定在jQuery mobile上工作?

Javascript 如何让事件绑定在jQuery mobile上工作?,javascript,jquery,jquery-mobile,Javascript,Jquery,Jquery Mobile,我正在将一个普通站点转移到jQuery mobile。我有一些事件绑定,以及其他特定于页面的调整: $('.roulette-img').css({ }); $('.shuffle-img').each(function(){ }); $('.button').bind('mousedown', function(){ }); $('.spin-btn').bind('mousedown', function(){ $(document).bind('mouseup', funct

我正在将一个普通站点转移到jQuery mobile。我有一些事件绑定,以及其他特定于页面的调整:

$('.roulette-img').css({
});

$('.shuffle-img').each(function(){
});

$('.button').bind('mousedown', function(){
});

$('.spin-btn').bind('mousedown', function(){
    $(document).bind('mouseup', function(){
    });
})

$(window).resize(function(){
});
现在某些页面不能正常工作(因为没有触发这些事件)。我理解这是因为jQuery的ajax导航,在加载第一个页面时脚本只加载一次,因此通过ajax加载的所有后续内容都不会绑定到事件


哪种方式是最好的解决方法

首先不要使用bind,它已被弃用并从jQuery版本1.9+中删除。改用on。下面是一个例子:

$('#buttonID').on('click', function(){       

});
此外,如果要在某个页面内执行某些操作,则需要在jQuery Mobile页面事件内执行,如下所示:

$(document).on('pagebeforeshow', '#index', function(){       

});
我给你举了一个有效的例子:

$('#buttonID').on('click', function(){       

});
在这里,您可以看到使用页面事件为特定页面执行代码的效果


您想知道的一切都可以在下面的回答/文章中找到:如果您希望在加载新页面时将处理程序绑定到新页面,您可以使用事件并将选择器限制到当前初始化的页面:

$(document).on("pageinit", function(e) {
    $(".button", e.target).on("mousedown", function() {
        // ...
    });

    $(".spin-btn", e.target).on("mousedown", function() {
        // ...
    });
});

您问题中的代码是否驻留在
ready
处理程序中?@FrédéricHamidi它驻留在一个自调用函数中。谢谢,这篇文章非常精彩。非常深入,正是我所需要的。小心。@Gajotres,IIRC我们之前已经讨论过这个问题,但是你不认为绑定到
pagebeforeshow
而不是
pageinit
会导致
mousedown
处理程序被绑定多次,如果页面被隐藏,然后再次显示吗?这只是一个例子。当我有其他文章非常详细地描述这一点时,没有必要解释所有内容:,这篇文章与我的答案中发布的文章相同。而且,
bind()
既没有被弃用,也没有被删除
on()
可以取代它,但是仍然可以使用
bind()
unbind()
。您是否在考虑
live()
die()