У меня есть страница с около 30 формами для управления клиентами, но формы вызываются на страницу только тогда, когда пользователь нажимает, чтобы открыть конкретную форму. Часть вывода является jQuery.getScript()
Функция для загрузки исходного файла для этой конкретной формы. Когда форма сохраняется или отменяется, форма перемещается вверх и удаляется со страницы.
Я столкнулся с проблемой при открытии одной и той же формы более одного раза при загрузке одной страницы. Исходный файл js добавлялся в dom каждый раз, когда форма вызывалась через ajax, и, таким образом, при последующих событиях сохранения функция сохранения выполнялась несколько раз, по одному разу каждый раз, когда исходный файл js загружался в dom.
Я нашел решение и проверил, чтобы убедиться, что его попросили поделиться вопросом / ответом, прежде чем я разместил это. Кажется, это так. Решение ниже в моем ответе.
Вот решение, которое я придумал, но, возможно, у кого-то есть что-то еще лучше. Делится ради сообщества:
Я объявляю глобальную переменную в моем самом верхнем js-файле вне dom ready, вот так:
LoadedScripts = [];
Затем в своей функции php для вызова скрипта я сделал его условным, например:
public static function load($path, $echo = false)
{
$js = '<script>';
$js .= 'if(LoadedScripts.indexOf("'.$path.'") == -1) { ';
$js .= 'jQuery.getScript("'.plugin_url_constant.'/lib/js/'.$path.'"); ';
$js .= 'LoadedScripts.push("'.$path.'"); ';
$js .= '}';
$js .= '</script>';
if($echo) echo $js;
else return $js;
}
Затем в свой запрос AJAX я включаю это в верхней части возвращаемой формы:
$output = my_prints_class::load('forms/clients/'.$this->form.'.js');
$output .= $this->displayform();
Очевидно, что если вы получаете этот скрипт-тег через ajax, вы вообще не хотите его отображать, но я добавил опцию в функцию для не-ajax-целей.
Других решений пока нет …