我在jQuery Mobile中有以下代码。页面首次加载时此代码可以正常工作,但是如果您导航到此页面则不执行任何操作。
$('#dontKnowReg').click(function(){
if($(this).is(':checked')) {
$('#dontKnowRegDetails').slideDown();
} else {
$('#dontKnowRegDetails').slideUp();
}
});
我通过将.click更改为.live修复了类似的问题,但在这种情况下,这意味着代码根本不起作用(即使我刷新页面)。谢谢
$('#dontKnowReg').live('click', function () {
if($(this).is(':checked')) {
$('#dontKnowRegDetails').slideDown();
} else {
$('#dontKnowRegDetails').slideUp();
}
});
答案 0 :(得分:0)
这应该有效:
$('#page').live('pagebeforeshow',function(e,data){
$('#dontKnowReg').unbind();
$('#dontKnowReg').bind('click', function(e) {
if($(this).is(':checked')) {
$('#dontKnowRegDetails').slideDown();
} else {
$('#dontKnowRegDetails').slideUp();
}
});
});
让我们说#page是一个可以找到复选框的页面(如果你有更多带有该复选框的页面使用它:$('#page,#page2,#page3')。live('pagebeforeshow'... ...)。每次页面#page即将显示时,我们将在复选框上绑定一个事件(如果事件已被绑定,unbind就在这里取消绑定,这也可以通过事件过滤器阻止,但我没有一个例子希望这有帮助。
Here's关于事件过滤器和here's的一些示例为什么在jQm环境中有必要。
您的第二个示例应该在jQM环境中更好地工作,您唯一的问题是何时应用它。如果您使用的是较新版本,请考虑使用.on(而不是.live(,。bind(,。delegate(
)答案 1 :(得分:0)
似乎你不能使用dom准备好jQuery。现在它起作用了:
//$(document).ready(function() {
$("#mypage").live('pageinit', function() {