Я не могу получить «return false», чтобы .live() не повторял распространение кода.
Вопрос
Я хочу, чтобы это было настроено так, чтобы при нажатии определенного фрагмента текста появлялось поле ввода текста, и пользователь мог вводить данные в поле, а затем либо нажимать кнопку «Сохранить», либо «Отменить» и либо отправлять его в базу данных или сбросить значение соответственно.Однако, несмотря на использование return false, я не могу предотвратить повторную активацию этого кода.
Я использовал die(), и это работает, но я также хочу иметь возможность повторно создать исходное событие щелчка после того, как пользователь либо сохранит, либо отменит, и не могу придумать, как заставить это работать.Заранее спасибо за помощь.
$('td[name]').live("click", function() {
nameof = $(this).attr("name");
idof = $(this).attr("id");
valueof = $(this).html();
$(this).html('<input type="text" name="' + nameof + '" value="' + valueof + '"><input type="hidden" name="id" value="' + idof + '"><span id="save">save</span>   <span id="cancel">cancel</span>');
return false;
});
Обновлять:
Вот что я наконец придумал (включая весь код редактирования на месте):
$('td[name="grouping"] span, td[name="title"] span').live('click', function() {
nameof = $(this).parent().attr("name");
idof = $(this).parent().attr("id");
valueof = $(this).html();
if($("table td>span").children('input').length > 0) {}
else {
if($(this).children().length > 0) {}
else {
$(this).html('<input type="text" name="' + nameof + '" value="' + valueof + '"><input type="hidden" name="id" value="' + idof + '"><input type="hidden" name="originalinput" value="' + valueof + '"><span class="save">save</span> <span class="cancel">cancel</span>');
}
}
});
$('.cancel').live('click', function() {
$(this).parent().html($(this).siblings('input[name="originalinput"]').attr("value"));
});
$('.save').live('click', function() {
savevalue = $(this).siblings('input[type="text"]').attr("value");
saveid = $(this).siblings('input[name="id"]').attr("value");
savecolumn = $(this).siblings('input[type="text"]').attr("name");
$.ajax({
type: "POST",
url: "../php/adminajax.php",
data: 'id=' + saveid + '&' + savecolumn + '=' + savevalue
});
$(this).parent().html(savevalue);
});
$('#saving').ajaxStart( function() {
$(this).fadeIn(100);
});
$('#saving').ajaxStop( function() {
$(this).fadeOut(2000);
});
Я уверен, что это намного сложнее, чем все, что я мог бы загрузить, но, по крайней мере, теперь я знаю основы редактирования AJAX на месте.Всем спасибо за помощь.
Решение
Похоже, вы по сути пытаетесь заключить сделку по редактированию на месте.Проблема, с которой вы столкнулись, заключается в том, что щелчок пользователя распространяется через текстовое поле/промежутки обратно в родительский контейнер, тем самым снова вызывая событие щелчка.Вам нужно отфильтровать его, чтобы он не выбирал td, в содержимом которого есть входные данные.Что-то в этом роде:
$('td[name]:not(td>input)').live(...);
Хотя это и не прямой ответ на то, что вы ищете, почему бы не использовать существующий плагин, подобный одному нашел здесь?