У меня есть всплывающее окно на моей странице, на котором есть ввод типа. Прямо сейчас вы можете ввести мусор и нажать "Отправить", и он позволяет вам. Я пытаюсь написать код, который будет вызывать ошибку во всплывающем окне, если вы введете что-то, что не включено в параметры typeahead, и оно не позволит вам отправить его, пока вы его не исправите. Вот мой код, он предназначен для составления школьного расписания, в котором есть классы в раскрывающемся списке typeahead.
var schedule = schedule.content.get();
var validClasses = Fp.filter(schedule.classes, function (class) { return !class.passed; }),
inputClasses = $('.optimizeViaClasses input.className').map(function () { return $(this).val(); }),
isErrorForValidClasses = Fp.all(inputClasses, function (inputClass) { return Fp.contains(validClasses, inputClass); });
if(validClasses !== inputClasses){
$errorMessage.text('Your selection does not match the class(es) in the current schedule!');
$errorMessage.show();
}
Прямо сейчас, если вы введете мусор в поле ввода, это вызовет ошибку, но все равно позволит пользователю отправить. Как я могу остановить пользователя от отправки до ввода правильного ввода?
Вот моя кнопка:
$submitBtn.on('click', function(event){
if(inputParameters() !== false){
$myPopUp= $modal.find('#myData').detach()[0];
}
event.preventDefault();
});
и я проверил вывод inputClasses в консоли разработчика Google, он выводит класс и prevObject. Мне просто нужен класс...
понял. ошибка, с которой я столкнулся, - это ошибка.
var schedule = schedule.content.get(),
validClasses = Fp.filter(schedule.classes, function (class) { return !class.passed; }),
inputClasses = $('.optimizeViaClasses input.className').map(function () { return $(this).val(); }),
actualValidClasses = Fp.pluck(validClasses, 'className');
$.each(inputClasses , function(index, value){
if($.inArray(value, actualValidClasses ) === -1){
$errorMessage.text('Your selection does not match the class(es) in the current schedule!');
$errorMessage.show();
error = true;
return false;
}
});
так как вы изменили свой код, я полагаю, вы можете попробовать это вместо этого:
http://api.jquery.com/event.stoppropagation/
также вы можете захотеть делать что-то в этом направлении, если stoppropagation не приводит к желаемому эффекту:
$("#formid").on("submit",function(e){
// declare isValid outside of this and set it in your validation function or call it inside this and check for that.
if(isValid) {
e.stopPropagation();
}
});
по крайней мере, так, как я обычно решал такие проблемы. Я надеюсь, что это помогает.
Пусть javascript возвращает либо True, либо false, и если всплывающее окно выходит, возвращает false другой мудрый true.
Например, если он попадает, если возвращает ложное другое мудрый истинный.