Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:
function foo() {
var result;
$.ajax({
url: '...',
success: function(response) {
myCallback(response);
}
});
return result;
}
function myCallback(response) {
// Does something.
}
Если вы используете produto
в качестве массива, вы должны указать его индекс или он не будет работать так, как ожидалось. Попробуйте использовать produto[0]
, указав, что вам требуется хотя бы одно значение в вашем массиве.
Два вопроса ...
1) Если ваше имя поля содержит скобки, точки или другие специальные символы, вы должны заключить это имя в кавычки.
"produto[]": {
required: true
}
2 ) Однако, если input
не содержит это точное имя, name="produto[]"
, то он не будет работать, поскольку вы не можете объявить массив в опции rules
в .validate()
. Опция rules
принимает только список имен отдельных полей.
Два возможных решения ...
1) Вы можете использовать метод .rules()
следующим образом. Использование селектора jQuery «начинается с» для выбора всего массива и jQuery .each()
для применения метода .rules('add')
к каждому полю в этой группе.
$('[name^="produto"]').each(function() { // select elements using "starts with" selector
$(this).rules('add', {
required: true,
// other rules
});
});
2) Однако, если только правило required
, вам не нужно будет объявлять его с помощью какого-либо JavaScript вообще. Вместо этого вы можете использовать атрибут required
HTML5, а плагин jQuery Validate все равно его поднимет.
<input type="text" name="produto[0]" required="required" />
<input type="text" name="produto[1]" required="required" />
<input type="text" name="produto[2]" required="required" />
<input type="text" name="produto[3]" required="required" />
<input type="text" name="produto[4]" required="required" />