我知道在jquerymobile应用程序中,如果我们使用pagebeforeshow页面事件,那里面的所有事件都会执行多次。我找到了解决方案,即:在隐藏页面时取消绑定事件,并在显示页面时绑定事件。但是代码是什么,它不在任何函数内部,或者每次访问页面时都必须执行而没有任何事件(如点击,点击,绑定,聚焦等)。
代码:
$(document).on( 'pagebeforeshow', '#profile', function(event){
//call to fetch user data
//first part
var invocationData6 = {
adapter : 'registerUser',
procedure : 'fetchUserProfileData',
parameters : [profileId]
};
WL.Client.invokeProcedure(invocationData6, {
onSuccess : fetchSuccess,
onFailure : fetchFailure,
});
function fetchSuccess(result){
$.mobile.utils.hideWaitBox();
var invocationResult = result.invocationResult;
var array1 = invocationResult.array;
}
function fetchFailure(result){
$.mobile.utils.hideWaitBox();
WL.Logger.error('Fetch Unsuccessful');
}
//second part
$(document).undelegate('#updBtn1', 'click').delegate('#updBtn1', 'click', function() {
var newAge = $("#updAge").val();
var newPhone = $("#updPhone").val();
var newSmoker = $("#flip-9").val();
$.mobile.utils.showWaitBox("e", "Wait! Updating your Info...");
var invocationData7 = {
adapter : 'registerUser',
procedure : 'updateRegisterData',
parameters : [profileId, newAge, newPhone, newSmoker]
};
WL.Client.invokeProcedure(invocationData7, {
onSuccess : update1Success,
onFailure : update1Failure,
});
function update1Success(result){
$.mobile.utils.hideWaitBox();
}
function update1Failure(result){
$.mobile.utils.hideWaitBox();
}
});
});
正如您在代码中看到的那样,第一部分未包含在任何内容中,因此无法绑定或取消绑定以防止它在pagebeforeshow页面事件中多次执行。但是通过使用delegate和undelegate事件可以很容易地防止第二部分出现此问题。
那么,如何防止第一部分多次执行。我无法将其括起来,因为当使用$ .mobile.changePage更改页面时必须执行它。