Привет, сообщество StackOverflow!
В настоящее время я работаю над своим собственным плагином jQuery для встроенного редактирования, поскольку те, которые уже существуют, не соответствуют моим потребностям.
В любом случае, я бы хотел предоставить пользователю следующие (логические) параметры, касающиеся способа работы редактирования:
- submit_button
- reset_on_blur
Допустим, пользователь хотел бы иметь кнопку отправки (submit_button = true) и хочет, чтобы встроенный элемент ввода был удален, как только он потерял фокус (reset_on_blur = true).
Это приводит к тому, что обработчик onClick регистрируется для кнопки, а обработчик onBlur регистрируется для элемента ввода.
Однако каждый раз, когда пользователь нажимает кнопку, также запускается обработчик onBlur, в результате чего режим редактирования отменяется, т. Е. До наступления события onClick. Это делает отправку невозможной.
К вашему сведению, HTML в режиме редактирования выглядит так:
<td><input type="text" class="ie-input" value="Current value" /><div class="ie-content-backup" style="display: none;">Backup Value</div><input type="submit" class="ie-button-submit" value="Save" /></td>
Итак, можно ли как-то проверить в обработчике onBlur, был ли потерян фокус при активации кнопки отправки, чтобы режим редактирования не оставлялся до запуска события onClick кнопки отправки?
Я также пытался зарегистрировать обработчик $ ('body'). Click () для имитации размытия и отслеживания того, какой элемент был нажат, но это тоже не сработало и привело к довольно странному ошибки:
$('html').click(function(e) { // body doesn't span over full page height, use html instead
// Don't reset if the submit button, the input element itself or the element to be edited inline was clicked.
if(!$(e.target).hasClass('ie-button-submit') && !$(e.target).hasClass('ie-input') && $(e.target).get(0) != element.get(0)) {
cancel(element);
}
});
jEditable использует следующий фрагмент кода. Мне не нравится такой подход из-за задержки. Не говоря уже о том, что это работает. ;)
input.blur(function(e) {
/* prevent canceling if submit was clicked */
t = setTimeout(function() {
reset.apply(form, [settings, self]);
}, 500);
});
Заранее спасибо!