Что я хочу сделать: каждый раз, когда я щелкаю строку таблицы, она переходит в режим редактирования. Когда я щелкаю другую строку, строка, на которую я щелкнул ранее, выходит из режима редактирования, а та, которую я только что щелкнул, переходит в режим редактирования.
Следующий код находится во включенном файле JavaScript. У меня есть функция, позволяющая редактировать строки таблицы.
function editRow(row) {
/* awesome code here */
}
И приготовьте события ...
$(".editable_title").click(function() {
editRow(this.parentNode);
});`
Что я пробовал:
Поместите код между
$(document).ready(function() { });
, но он работает только при первом нажатии и первой отправке редактирования. Но потом, если я попытаюсь сделать это снова, это просто не сработает.Просто поместите код сам по себе во включенный файл без
$(document).ready(function(){ });
. Затем используйте событияonclick
на tr. Проблема:- JavaScript навязчив.
- Если я нажимаю одну и ту же строку более одного раза, событие запускается несколько раз; и если я нажимаю на разные строки, все они одновременно переходят в режим редактирования.
Я знаю, что это просто вопрос наличия постоянного слушателя событий и использования unbind. Я попытался использовать .live()
, который работал хорошо, но не смог заставить .die()
работать.
Не могли бы вы дать мне несколько предложений?
2 ответа
Попробуй это
$(".editable_title").one(function() {
editRow(this);
});
function editRow(row) {
var rowNode = row.parentNode;
/* awesome code here */
//Attach the click event here again after editing is done
//If you are doing any ajax calls then this should be done in the success callback
$(row).one(function() {
editRow(this);
});
}
Вы можете использовать one
вместо click
:
$('.editable_title').one('click', function() { editRow(this.parentNode); });
А затем снова используйте one
только для .editable_title
строки, которую вы отредактировали, когда закончите редактирование.
Или вы можете использовать флаг:
$('.editable_title').click(function() {
var $p = $(this).parent();
if($p.data('editing'))
return;
$p.data('editing', true);
editRow($p[0]);
});
А затем выполните $x.removeData('editing')
для соответствующего $x
, когда вы Закончив редактирование.
Похожие вопросы
Связанные вопросы
Новые вопросы
jquery
jQuery - это библиотека JavaScript, рассмотрите возможность добавления тега JavaScript. jQuery - это популярная кросс-браузерная библиотека JavaScript, которая облегчает прохождение Document Object Model (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться в рассматриваемом коде, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.