JQuery Mobile:禁用并重新启用并刷新选择菜单选项

时间:2014-06-16 02:41:24

标签: javascript jquery-mobile select-menu

我想根据其他值在选择菜单中禁用或启用某些选项。在该示例中,用户将输入权重(在页面上的stepOne),如果该值大于3,则选项" quad" (必须禁用页面上的步骤2)。如果该值小于或等于3,则选项" quad"必须启用。

html包含一个权重输入,然后是一个触发stepOneSubmission的提交按钮。下面的代码会发生什么:如果权重高于3,页面将不会改变 - 我认为它会在刷新时卡住 - 也许是因为尚未创建选择菜单因此无法刷新???如果用户输入的权重低于3,则页面将更改为stepTwo。如果用户然后导航回stepOne并输入高于3的权重,则stepOne Submission这次工作,并且" quad"被禁用。

function stepOneSubmission() {
var weight = $('#weight').val();
$('#weightTwo').val(weight);
var strengthSelect=$("#strength");
if (weight>3)
{
$("#strength option[value=4]").prop('disabled',true);
strengthSelect.selectmenu("refresh");
$.mobile.pageContainer.pagecontainer("change", "#stepTwo");
}
$.mobile.pageContainer.pagecontainer("change", "#stepTwo");
};
function stepTwoSubmission() {
$.mobile.pageContainer.pagecontainer("change", "#theReport");
};

1 个答案:

答案 0 :(得分:0)

我没有成功采用上述方法。相反,我从表单提交中拆分了选择选项更改。我创建了一个新函数setStrengthValues来根据权重重建选择选项,并在权重字段的关键字上运行。

function setStrengthValues(){

var weight = $('#weight').val();
$('#weightTwo').val(weight);
var strengthSelect=$("#strength");
var selectValues = [{"single": "Single", "double": "Double", "quad": "Quad"}];
if (weight >= 3) {
 $("#strength").find('option').remove();
 $(selectValues[0]).each(function (key, value) {
     $.each(selectValues[0], function (key, value) {
         strengthSelect
         .append($("<option></option>")
         .attr("value", key)
         .text(value));
     });
 });
strengthSelect.find('option:contains(' + selectValues[0].quad + ')').remove();  
strengthSelect.val('Single');
strengthSelect.selectmenu("refresh");       
} 
else {
    $("#strength").find('option').remove();
    $(selectValues[0]).each(function (key, value) {
        $.each(selectValues[0], function (key, value) {
        strengthSelect
         .append($("<option></option>")
         .attr("value", key)
         .text(value));
     });
 });
strengthSelect.val('Single');
strengthSelect.selectmenu("refresh");
}       
};
function stepOneSubmission() {
$.mobile.pageContainer.pagecontainer("change", "#stepTwo");
};