Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否通过触发此页面中的函数将Jquery mobile重定向到新页面?_Javascript_Jquery_Jquery Mobile - Fatal编程技术网

Javascript 是否通过触发此页面中的函数将Jquery mobile重定向到新页面?

Javascript 是否通过触发此页面中的函数将Jquery mobile重定向到新页面?,javascript,jquery,jquery-mobile,Javascript,Jquery,Jquery Mobile,我正在使用JQuery mobile构建一个移动应用程序,在首页中我们称之为第1页,其中包含指向不同页面的导航按钮,我们称之为第2页 下面是第1页 $(document).ready(function () { $("body").pagecontainer({ defaults: true }); $("#page-2").click(function () { $("body").pagecontainer("change", "pa

我正在使用JQuery mobile构建一个移动应用程序,在首页中我们称之为第1页,其中包含指向不同页面的导航按钮,我们称之为第2页

下面是第1页

$(document).ready(function () {
    $("body").pagecontainer({
        defaults: true
    });

    $("#page-2").click(function () {
        $("body").pagecontainer("change", "page-2.html", {
            reload: true
        });
        $(document).ready(function () {
            function_in_page - 2.init();
        });
    });
第2页有以下内容

var function_in_page = {
    init: function () {
        alert('first-1');
        $("#button-1").click(function () {
            alert('second-1');
        });
    });

那么,当我点击ID为(button-1)的按钮时,会出现“First-1”的警报,但什么也没有发生,有什么建议吗?

如果第2页中的脚本提前执行,按钮可能还不存在。尝试将其包装到
文档中。准备就绪

$(document).ready(function(){
   var function_in_page={init:function(){
   alert('first-1');
    $("#button-1").click(function(){
    alert('second-1');
    });});
});

首先,
.pagecontainer()
是使用默认设置自动初始化的,因此您不需要初始化它

其次,不要使用
.ready()
在jQuery Mobile中添加侦听器,而是使用pagecontainer事件。每当jQM框架加载页面和/或通过Ajax导航到页面时,都会触发后一个事件,特别是在单页面模型中。与
.ready()
不同,它只在框架初始化时触发一次

在使用pagecontainer事件的单页面模型中,有许多方法可以使用jQuery Mobile控制您的webapp。最安全的方法是给每个页面一个唯一的ID,以确定哪个页面上省略了哪个事件。另一个注意事项是,您需要知道,无论有多少外部页面,DOM中只会保留两个页面;主页和从主页导航到的另一个外部页面

要添加侦听器,请使用
pagecreate
事件,它相当于
.ready()
,可以委派给特定的页面


$(文档)。在(“页面创建”,“主页”,函数(){
$(“.selector”)。在(“单击”,函数(){
/*运行代码*/
});
});
该事件将在每页触发一次,但请注意,它将在通过Ajax加载的任何外部页面上再次触发。因此,在添加新绑定之前,应该使用
.off()
删除以前的绑定。否则,无论何时通过Ajax加载外部页面,附加的侦听器都将是多个


$(文档)。在(“页面创建”,“第二”,函数(){
$(“.selector”).off(“click”).on(“click”),函数(){
/*运行代码*/
});
});
将所有自定义JS代码保留在所有页面的
头部
,尽管第一次运行时会加载一次代码。jquerymobile加载每个外部页面的第一个页面div,该div之外的任何内容都被完全忽略


回到上面的代码,下面是它的样子。为每个页面指定一个ID,并使用它们添加
单击
侦听器。让我们假设
home
是主页,
second
是page-2.html

$(文档)。在(“页面创建”,“主页”,函数(){
$(“#btn”)。在(“单击”,函数(){
$.mobile.pageContainer.pageContainer(“更改”,“page-2.html”);
});
});
现在,第2.html页可见。将
单击
侦听器添加到
按钮-1

$(文档)。在(“页面创建”,“第二”,函数(){
$(“#按钮-1”)。关闭(“单击”)。打开(“单击”),功能(){
警报(“第2页”);
});
});


+1谢谢omar,它解决了我的问题,我对这种新方法有点困惑,但我试图理解它,但我面临另一个问题,例如,当我被重定向到第2页时,有一段时间它会让我回想起我来自何处?Salam@MohamedMostafa你能发布另一个包含所有细节和代码的问题吗?