试图限制先行选项

时间:2014-03-17 17:38:50

标签: javascript jquery html html5 typeahead

所以我有一个先行者。您有一个计划,并开始键入一个类,输入的下拉列表将显示您的计划中可用的类。但是,如果他们不在时间表中,我不希望用户能够提交它。现在你可以输入垃圾,即使它不在输入类型的下拉列表中,你仍然可以提交它。这是我的代码:

$.each(schedule.classes, function(value) {
  if(value !== $('.optimizeScheduleClasses :input').val()){
    $errorMessage.text('Your selection do not match the class(es) available in the current schedule!');
    $errorMessage.show();                       
    error = true;                       
    return false;
  }
});

然而,这只是给出错误,无论他们是否在计划中放入垃圾或实际课程。我也试过这个:

var schedule = schedule.content.get();
$.each(schedule.classes, function(index, value){
  if(schedule.classes[index] !== value){
    $errorMessage.text('Your selection does not match the class(es) in the current schedule!');
    $errorMessage.show();                       
    error = true;                       
    return false;
  } else {
    error=false;
  }
});

但这样可以让每个班级都被选中,甚至可以选择日程表以外的课程。有谁知道我做错了什么?

HTML:

<script id="ScheduleClassPopup" class="partial" type="text/html"> <div class="control-group optimizeScheduleClasses modal-body-row" data-index="{{rowNum}}">

1 个答案:

答案 0 :(得分:0)

我认为你的代码不太正确:

 if(schedule.classes[index] !== value)

根据each的文档,它们将始终相等。您应该将schedule.classes[index]$('.optimizeScheduleClasses :input').val()进行比较,这与原始代码完全相同。

我认为在submit内做一些事情会更好。如果某个地方有$("#form").submit(function(){});,那么请尝试检查输入是否有效。一个简单的想法是使用全局变量(虽然不太好)来指示错误然后在提交函数内检查它。在您的示例中,您可以检查变量error

但我认为允许无效输入完全没问题。恕我直言,回复一条消息,告诉用户他/她的日程安排中没有这样的课程,这不是一个劣等选择。

对于原始代码,假设在另一个函数中,请尝试:

$.each(schedule.classes, function(index, value) {
  if(value == $('.optimizeScheduleClasses :input').val()){                       
    return true;
  }
});
$errorMessage.text('Your selection do not match the class(es) available in the current schedule!');
$errorMessage.show();                       
error = true;
return false;