2016-01-21 6 views
0

Я работаю с загрузочной таблицей внутри диалогового окна jquery и имею проблемы с закрытием диалогового окна и освобождением памяти. Позвольте мне показать демонстрационный код:кнопки не работают должным образом в диалоговом окне jq (два способа закрытия диалогового окна jquery с помощью таблицы начальной загрузки)?

Способ 1:jsFIDDLE Вот код с двумя кнопками внутри содержимого диалогового окна, которые я использую для сохранения или отмены. Они закодированы с помощью $.click() (не по диалоговому окну). Чтобы увидеть проблемные залежных 4 шага:

  1. Нажмите на первый флажок и принять дату
  2. Сделайте то же самое для второго флажка
  3. Uncheck обоих (поле даты пусто в обоих рядах)
  4. Проверьте снова один checkbox и принять дату

Теперь вы заметите, что дата была добавлена ​​в оба поля каждой строки, даже если не нажимала вторую. Когда я играю больше, я могу даже снять оба флажка одним щелчком мыши.

Метод 2:jsFIDDLE Та же идея, но я использую кнопки, определенные в диалоговом окне JQuery и если вы делаете те же самые шаги сверху, вы не заметите проблему - она ​​работает просто отлично.

Вопрос: Мне нужно использовать первый метод для моей собственной цели, но что делать, чтобы исправить эту проблему с памятью?

+0

что это нужно делать с утечкой памяти? – dandavis

+0

Я не английский. Я могу использовать неправильную терминологию, извините за мой английский. Я просто хочу сказать, что каким-то образом он запоминает последние шаги (индексы строк). Может быть, есть что-то, что разрушает диалог, почему второй метод работает нормально? – soonic

+0

Я думаю, '$ ('# submitBtn'). Click' применяется много раз, потому что console.log() внутри него срабатывает один раз, и много раз после этого ... – dandavis

ответ

3

У вас есть проблема с областью видимости в вашем коде; Пожалуйста, попробуйте этот обновленный Fidle

var currentRow = null; 

$("#pickdate").datepicker({dateFormat: "dd-mm-yy"}).datepicker("setDate",new Date()); 
$('#table').on('check.bs.table', function (e, row, $el) { 

currentRow = row; 

    $("#dialog").dialog({ 
       dialogClass: "no-close tt", 
       modal: true, 
       title: "Data zamknięcia", 
       width:189, 
     }); 


}); 

См fidle для полного кода

+0

Большое спасибо, что работает! Я думаю, почему так должно быть сделано? Он должен взять новейший row.id в моей демонстрации, и есть только одна строка, где я назначаю значение для поля за время – soonic

+0

@soonic Glad, которому я мог бы помочь. Возможно, лучше пометить мой ответ как правильный, чтобы помочь другим. – Sandcar

+0

До сих пор это сводило меня с ума. Я не заметил, что вы также изменили скобки для функции 'check.bs.table', чтобы эти две кнопки (отменить и ОК) вышли за ее пределы. Проблема с 'row' исчезла, но потом я заметил, что несколько раз при обработке других значений. Eh ... теперь это действительно работает :)) Мой первый комментарий больше не действителен. Я понимаю сейчас :) Еще раз спасибо! – soonic