我有一个'pagebeforeshow'处理程序,用于清除文本框的值并选择菜单。
$("#addSchedulePage").live("pagebeforeshow", function(event){
$("#message", $("#addSchedulePage")).html("");//clear messagebox
$("#message", $("#addSchedulePage")).hide();//hide messagebox
$("#startDate", $("#addSchedulePage")).val("");
$("#time", $("#addSchedulePage")).val("");
var lstAppliance = $("#lstAppliance", $("#addSchedulePage"));
var lstScheduleTaskType = $("#lstScheduleTaskType", $("#addSchedulePage"));
lstAppliance[0].selectedIndex = 0;
lstScheduleTaskType[0].selectedIndex = 0;
$("#lstAppliance", $("#addSchedulePage")).selectmenu('refresh');
$("#lstScheduleTaskType", $("#addSchedulePage")).selectmenu('refresh');
});
这是问题所在。当我的选择菜单选项变得太长时,jqm会自动打开一个新对话框,而不是在我点击它时下拉列表,并在我从选择菜单中选择一个选项时再次触发事件。 是否有解决方法或离开以阻止事件触发?
答案 0 :(得分:3)
我的回答对您的问题没有帮助,但您可以简化代码:
$("#addSchedulePage").live("pagebeforeshow", function(event){
$("#message", this).html("").hide(); //clear and hide messagebox
$("#startDate", this).val("");
$("#time", this).val("");
var lstAppliance = $("#lstAppliance", this);
var lstScheduleTaskType = $("#lstScheduleTaskType", this);
lstAppliance[0].selectedIndex = 0;
lstScheduleTaskType[0].selectedIndex = 0;
lstAppliance.selectmenu('refresh');
lstScheduleTaskType.selectmenu('refresh');
});
我有:
this
$("#addSchedulePage")
。.html()
和.hide()
lstAppliance
和lstScheduleTaskType
答案 1 :(得分:0)
确定。坐下来思考我的程序流程后,我设法通过改变处理事物的方式来解决这个问题。
这是该计划的流程。 schedulePage(点击添加按钮) - > addSchedulePage(点击选择菜单) - >对话框包含所有可用选项。
schedulePage - > addSchedulePage('pagebeforeshow'被解雇)
选择菜单对话框 - > addSchedulePage('pagebeforeshow'被解雇) - 在我从我的选择菜单中选择我想要的选项后,我的所有值都被清除。
如果你在我的问题中注意到我想在事件'pagebeforeshow'被触发时清除值。 因此,当页面显示时,我没有清除值,而是在我点击schedulePage中的“添加按钮”时清除了值。这是有效的,因为当我关闭addSchedulePage时,jquerymobile只是隐藏它并且它仍然在DOM中。
我不确定这是否是正确的做事方式,但它确实解决了我的问题。
答案 2 :(得分:0)
我有同样的问题并解决了它。 这也可以解决它: