【问题标题】:Select option validation for start and end time选择开始和结束时间的选项验证
【发布时间】:2014-06-26 12:51:30
【问题描述】:

选择开始时间

<select name="start-time">
<option value="00:00 am" selected="selected">00:00 am</option><option value="00:30 am">00:30 am</option><option value="01:00 am">01:00 am</option><option value="01:30 am">01:30 am</option><option value="02:00 am">02:00 am</option><option value="02:30 am">02:30 am</option><option value="03:00 am">03:00 am</option><option value="03:30 am">03:30 am</option><option value="04:00 am">04:00 am</option><option value="04:30 am">04:30 am</option><option value="05:00 am">05:00 am</option><option value="05:30 am">05:30 am</option><option value="06:00 am">06:00 am</option><option value="06:30 am">06:30 am</option><option value="07:00 am">07:00 am</option><option value="07:30 am">07:30 am</option><option value="08:00 am">08:00 am</option><option value="08:30 am">08:30 am</option><option value="09:00 am">09:00 am</option><option value="09:30 am">09:30 am</option><option value="10:00 am">10:00 am</option><option value="10:30 am">10:30 am</option><option value="11:00 am">11:00 am</option><option value="11:30 am">11:30 am</option><option value="12:00 pm">12:00 pm</option><option value="12:30 pm">12:30 pm</option><option value="13:00 pm">13:00 pm</option><option value="13:30 pm">13:30 pm</option><option value="14:00 pm">14:00 pm</option><option value="14:30 pm">14:30 pm</option><option value="15:00 pm">15:00 pm</option><option value="15:30 pm">15:30 pm</option><option value="16:00 pm">16:00 pm</option><option value="16:30 pm">16:30 pm</option><option value="17:00 pm">17:00 pm</option><option value="17:30 pm">17:30 pm</option><option value="18:00 pm">18:00 pm</option><option value="18:30 pm">18:30 pm</option><option value="19:00 pm">19:00 pm</option><option value="19:30 pm">19:30 pm</option><option value="20:00 pm">20:00 pm</option><option value="20:30 pm">20:30 pm</option><option value="21:00 pm">21:00 pm</option><option value="21:30 pm">21:30 pm</option><option value="22:00 pm">22:00 pm</option><option value="22:30 pm">22:30 pm</option><option value="23:00 pm">23:00 pm</option><option value="23:30 pm">23:30 pm</option></select>

选择结束时间

<select name="end-time">
<option value="00:00 am" selected="selected">00:00 am</option><option value="00:30 am">00:30 am</option><option value="01:00 am">01:00 am</option><option value="01:30 am">01:30 am</option><option value="02:00 am">02:00 am</option><option value="02:30 am">02:30 am</option><option value="03:00 am">03:00 am</option><option value="03:30 am">03:30 am</option><option value="04:00 am">04:00 am</option><option value="04:30 am">04:30 am</option><option value="05:00 am">05:00 am</option><option value="05:30 am">05:30 am</option><option value="06:00 am">06:00 am</option><option value="06:30 am">06:30 am</option><option value="07:00 am">07:00 am</option><option value="07:30 am">07:30 am</option><option value="08:00 am">08:00 am</option><option value="08:30 am">08:30 am</option><option value="09:00 am">09:00 am</option><option value="09:30 am">09:30 am</option><option value="10:00 am">10:00 am</option><option value="10:30 am">10:30 am</option><option value="11:00 am">11:00 am</option><option value="11:30 am">11:30 am</option><option value="12:00 pm">12:00 pm</option><option value="12:30 pm">12:30 pm</option><option value="13:00 pm">13:00 pm</option><option value="13:30 pm">13:30 pm</option><option value="14:00 pm">14:00 pm</option><option value="14:30 pm">14:30 pm</option><option value="15:00 pm">15:00 pm</option><option value="15:30 pm">15:30 pm</option><option value="16:00 pm">16:00 pm</option><option value="16:30 pm">16:30 pm</option><option value="17:00 pm">17:00 pm</option><option value="17:30 pm">17:30 pm</option><option value="18:00 pm">18:00 pm</option><option value="18:30 pm">18:30 pm</option><option value="19:00 pm">19:00 pm</option><option value="19:30 pm">19:30 pm</option><option value="20:00 pm">20:00 pm</option><option value="20:30 pm">20:30 pm</option><option value="21:00 pm">21:00 pm</option><option value="21:30 pm">21:30 pm</option><option value="22:00 pm">22:00 pm</option><option value="22:30 pm">22:30 pm</option><option value="23:00 pm">23:00 pm</option><option value="23:30 pm">23:30 pm</option></select>

如果开始时间是从两者之间选择的,是否有任何快速的jQuery登录来禁用结束时间中的先前选项。

例如,如果开始时间选择为下午 3 点,并且在结束时间中选择下午 3 点之前的所有选项。

在 jQuery 中有什么简单的方法吗?

谢谢

【问题讨论】:

标签: javascript jquery


【解决方案1】:

这应该使用所选选项的索引并禁用该索引之前的其他选择选项:

$('select[name=start-time]').on("change",function(){
    var theSelectedIndex = $(this)[0].selectedIndex;
    $.each($('select[name=end-time] option'), function(){
        var endOptionIndex = $(this).index();
        if (endOptionIndex < theSelectedIndex){
           $(this).attr('disabled','disabled');
        } else{
           $(this).removeAttr('disabled').prop('selected', true);
           return false;
        }
    });
});

小提琴:http://jsfiddle.net/nUAV3/

【讨论】:

  • 太棒了,这行得通,但无论如何,除了禁用可以删除以前的值吗?
  • 更改为 $(this).attr('hidden','hidden'); 有效。非常感谢。
【解决方案2】:
$("select[name='start-time']").on("change", function(){
    $("select[name='end-time']").empty();
    var startix = $("select[name='start-time'] option:selected").index();
    $("select[name='start-time'] option").each(function(ix, el){
        if (ix >= startix) {
            $(this).clone().appendTo("select[name='end-time']");
        }
    });
});

小提琴:http://jsfiddle.net/H6PAL/

【讨论】:

  • 更优雅的解决方案@Maurice。
【解决方案3】:

你可以这样做:

  • 获取start-time选中的option
  • 循环通过end-timeoptions
  • 如果之前禁用 end-timeoption

`

   $("select[name='start-time']").change(function(){
        var startVal = $(this).find("option:selected").val();
        $("select[name='end-time']").find("option").each(function(idx, elem){
            if (checkIfOptionBeforeStartVal(startVal, $(this).val()) // I let you code this compareson function
               $(this).attr('disabled', true);
            else
               $(this).attr('disabled', false);
        });
    });

`

【讨论】:

  • 我很想知道为什么投反对票。我想知道怎么了。
  • 我认为是因为您误读了这个问题?当操作说“例如,如果开始时间选择为下午 3 点,并且在结束时间中,下午 3 点之前的所有选项都应该被禁用。”他们的意思是不允许用户在开始时间之前选择结束时间而不是完全禁用输入
  • 不,它禁用了option 而不是select,所以它禁用了值在下午3点以下的选项。
  • 原来如此,我错过了.find("option")我当时不知道
【解决方案4】:

除了@staticVoid 的答案,做类似的事情

$('#start').on("change",function(){
    var select = $(this)[0].selectedIndex;
    $('option').removeAttr('disabled');  //in case start time is changed
    $.each($('#end option'), function(){
        var disable = $(this).index();
        if (disable < select){
           $(this).attr('disabled','disabled');
        } else{
           $(this).removeAttr('disabled').prop('selected', true);
           return false;
        }
    });
});

以确保在更改开始时间时它可以正常工作。 FIDDLE

注意:我在两个选择菜单中都添加了id,以便于处理。

此外,您可以尝试处理相反的情况,即当用户第一次选择结束时间时,在开始时禁用所有时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多