В SO есть много вопросов, которые затрагивают проблему обнаружения кликов за пределами назначенного элемента. Однако ни один из них, похоже, не служит моей цели в этом сценарии. Вот функция:JQuery: содержимое элемента восстановления при нажатии за его пределами
function rateit(){
var cell = $('td.ratingcell');
cell.dblclick(function(e){
e.preventDefault();
var oldhtml = $(this).html();// restore this when clicked outside the cell
var oldratingval = parseFloat($(this).find('span.ratingval:first').text(), 10);
var oldratingcount = parseFloat($(this).find('span.ratingcount:first').text(), 10);
var blanks = '<span id="5">☆</span><span id="4">☆</span><span id="3">☆</span><span id="2">☆</span><span id="1">☆</span>';
$(this).addClass('editablerating');
$(this).html("<span id='editrating'>" + blanks + "</span>");
var clickedstar = $('#editrating span');
clickedstar.click(function(f){
f.preventDefault();
var newrating = parseFloat($(this).attr('id'), 10);
var deckid = $(this).parent().parent().parent().find('td.ftable-deck-name:first').find('span.deck_id:first').text();
updaterating(deckid, newrating, this);
});
});
}
В основном, эта функция делает ячейку таблицы редактируемой для пользователя, чтобы обновить информацию о инлайн. Он отлично работает, когда пользователь что-то обновляет. Однако мне также нужно обрабатывать ситуации, когда пользователь дважды щелкает ячейку (элемент, на который ссылается var cell
в функции выше) для редактирования, но затем щелкает в другом месте (вне ячейки) без какого-либо обновления или нажимает клавишу Esc. Когда это произойдет, мне нужно восстановить содержимое cell
до var oldhtml
.
Почти все ответы, которые я нашел на SO упоминание, определяющие глобальный обработчик кликов, привязанный к тегу body. Но если я это сделаю, как передать значение oldhtml
этому обработчику, который, очевидно, будет находиться вне функции выше?
Спасибо за гениальную идею о данных Jquery '()' ... не знал об этой удивительной функции. Просто отредактируйте точки из ваших 'hasClass()' функций, поскольку имена классов идут без точек в качестве аргумента. – TheLearner
WC ... Да, вы правы. Удалено '.' Из 'hasClass()' –