JQuery mobile v1.2 javascript事件在弹出窗口中不起作用

JQuery mobile v1.2 javascript事件在弹出窗口中不起作用,javascript,html,jquery-mobile,Javascript,Html,Jquery Mobile,我正在使用jquerymobile1.2和php开发一个web应用程序。从配置文件页面,我有一个弹出窗口,要求用户确认注销。我想做的是用一个click事件截获该按钮,以通过ajax请求处理注销 我的所有项目页面中都包含一个自定义的.js文件。应用程序将在“帐户”页面中加载。我知道它正在通过ajax导航加载和工作。 当我在custom.js中包含此代码时: $("#perfil").live('pageshow',function(event){ alert('This page was

我正在使用jquerymobile1.2和php开发一个web应用程序。从配置文件页面,我有一个弹出窗口,要求用户确认注销。我想做的是用一个click事件截获该按钮,以通过ajax请求处理注销

我的所有项目页面中都包含一个自定义的.js文件。应用程序将在“帐户”页面中加载。我知道它正在通过ajax导航加载和工作。 当我在custom.js中包含此代码时:

$("#perfil").live('pageshow',function(event){
    alert('This page was just enhanced by jQuery Mobile!'); 
});
当显示配置文件页面时,我会收到警报。问题在于单击功能

当我包括以下内容时:

$("#perfil").live('pageshow',function(event){
    alert('This page was just enhanced by jQuery Mobile!'); 

    $('#logoutButton').click(function(){
        $('#output').html('Logging Out...');
        $.get("api/logout",function(data){
            if(data.success) {
                window.location = "index"
            }
            else{
                $('#output').html('Logout failed. Try again');
            }
            }, "json");
    });

});
这种行为很奇怪。当我从主页导航到配置文件页面时,我会收到警报。但是按钮没有反应。但是,当我刷新(或最初从配置文件页面加载应用程序)时,按钮的行为正确,并运行javascript注销功能

以下是html按钮的代码:

<a id="logoutButton" data-role="button" data-icon="check" 
      data-inline="true" data-theme="e">Si, finalizar.</a>   
Si,finalizer。

在JQM中,这完全取决于数据的初始化方式和页面的结构

加载主页面时,所有脚本都会初始化一次并缓存,以获得类似于“Ajax”的响应和感觉

如果主页面和配置文件页面采用多页面格式,则单击按钮不会成为问题,因为脚本只初始化一次

或者,如果您在一个页面中,rel=“external”从主页面到配置文件页面将起作用。外部链接将强制JQM发出新的HTTP请求;但是,您可以使用松散页面转换效果

我认为更好的架构是创建单个JQM页面并使用注销按钮 作为绑定函数注销

*如何绑定单击功能:

$('#foo').bind('click', function() {
  alert('User clicked on "foo."');
});

您的个人资料页面上的custom.js实际上没有被加载(下面有更多内容),因此,当您绑定click事件时,您的按钮在DOM中不存在,您可以通过使用事件委派来解决这个问题

$(document).on('click', '#logoutButton', function(){
        $('#output').html('Logging Out...');
        $.get("api/logout",function(data){
            if(data.success) {
                window.location = "index"
            }
            else{
                $('#output').html('Logout failed. Try again');
            }
            }, "json");
    });
现在没有加载custom.js的原因是,默认情况下,当您在jQuery中加载页面时,移动设备只需通过ajax加载
data role=“page”
div,并将其附加到当前页面的DOM。要实现的重要部分是,只加载div页面,而不加载该页面上的任何其他资源

如果希望在单独的页面上加载自定义脚本,则需要将其包含在div
data role=“page”
包装中。您还可以通过在链接上使用
data ajax=“false”
属性(或者如果是另一个域,则使用
rel=“external”
),告诉JQM在没有ajax的情况下完全加载页面


作为一个侧重点,你应该考虑使用而不是<代码> .javery 1.7代码> Live 。Live 已经。

我为格式化道歉。似乎无法正确阅读。为便于将来参考,back tics用于内联格式化代码,用于格式化代码块,可以将代码块缩进四个空格,也可以通过突出显示代码并单击“格式化代码”按钮{}来使用工具栏。感谢帮助。是的,我的页面是多页的。每一页我都有一个不同的文件。脚本已初始化,但由于某些原因,它未拦截单击。。。然而,警报仍然有效,它告诉我它正在被呼叫…哇。效果很好。非常感谢你的帮助。这让我很头疼…不客气,很乐意帮忙。