В colModel у меня есть один custom_func: myFunc()
, который проверяет, не введено ли целое значение, введенное в текстовое поле модальной формы Add или Edit jqGrid, в нескольких строках, видимых в сетке, где loadonce:true
установить в настройках. То, как это custom_func:
не выполняется, пока не будет нажата кнопка отправки модальной формы, но я хотел бы проверить текстовое поле модальной формы, когда оно находится в фокусе (или размытие?). Есть ли способ сделать это? Я попытался сделать это, как показано ниже в опции afterShowForm:
, и это вроде работает, но сообщение об ошибке и остановка не то же самое, что при нажатии кнопки Отправить, есть ли способ сделать фокусировку / размытие от custom_func: myFunc()
* * 1006
Ниже приведен фрагмент colModel, за которым следует пользовательская функция, а затем попытка использовать focusout в afterFormShow: function()
модальной формы Add.
//colModel
...},
{name: 'ezyid', index: 'ezyid', width: 60, align: "center", editable: true,
formoptions: { rowpos: 1,
colpos: 1,
label: "Ezy ID",
elmprefix: "(*) "
},
editrules: {
custom: true,
custom_func: chkDuplicateEzyids, //custom function
required: true
}
},
Пользовательская функция colModel:
function chkDuplicateEzyids(value, colname) {
var isFound = false;
var rows = grid.jqGrid('getRowData');
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
if (value == row.ezyid && value != '') { isFound = true };
}
if(isFound){
return [false, "This Ezy ID is in use, please enter another or press Cancel."];
} else {
return [true, ""];
}
}
Моя менее чем идеальная попытка использовать пользовательскую функцию, доступную из опции afterShowForm:
опций Добавить модальные формы (было бы аналогичным использованием в Edit, если бы это было сделано таким образом):
addSettings = {
recreateForm: true,
jqModal: false,
reloadAfterSubmit: false,
closeOnEscape: true,
closeAfterAdd: true,
afterShowForm: function ($form) {
var form = $form.parent()[0];
$("#ezyid", form).blur(function () { //or focusout() if better
var resp = chkDuplicateEzyids($(this).val(), 'Ezy ID');
if (!resp[0]) {
$("#FormError", form).show();
$(".ui-state-error", form).html(resp[1]);
}
});
$("#lui_" + grid[0].id).hide();
},
onclickSubmit: onclickSubmitLocal
},
Подводя итог, я хотел бы использовать focusout (или blur) для немедленной проверки значения текстового поля, вместо того, чтобы вводить все остальные значения формы, чтобы перейти к кнопке Submit только для того, чтобы найти значение, которое уже находится в использовать. Это кажется обычной практикой, но я не могу понять это в этом контексте. Много ТИА.
(некоторые фрагменты кода используются повторно с одобрением и благодарностью пользователя stackoverflow @Oleg)