#javascript #jquery
#javascript #jquery
Вопрос:
Я работаю над некоторым устаревшим кодом jQuery, и есть часть, которая более или менее похожа на эту:
tjq("table#tabla_pedidos tr td").click(function(){
.
.
.
tjq("body").on('click',".popup-delete", function(){
var title = "Confirm";
var question = "Are you sure?";
var cancel = "NO";
var accept = "YES";
tjq.when( dialog(title, question, cancel, accept) ).then(
Где «tjq» — это имя, присвоенное «$» в этом коде, чтобы избежать конфликтов.
Что делает код? Учитывая таблицу HTML, когда пользователь нажимает на нее, отображается всплывающее окно, а если пользователь нажимает на кнопку ( ".popup-delete"
) в нем, отображается другое всплывающее окно подтверждения.
Мои проблемы в том, что это второе всплывающее окно подтверждения не работает. Ошибка, которую я получаю, это:
dialog.js:5 Uncaught TypeError: $ is not a function
at dialog (dialog.js:5)
at HTMLAnchorElement.<anonymous> (VM337 scripts.js:388)
at HTMLBodyElement.dispatch (jquery-1.11.3.min.js:4)
at HTMLBodyElement.r.handle (jquery-1.11.3.min.js:4)
Вместо этого я попытался добавить tjq.dialog(
. но тогда я получаю ошибку:
Uncaught TypeError: tjq.dialog is not a function
at HTMLAnchorElement.<anonymous> (VM375 scripts.js:388)
at HTMLBodyElement.dispatch (jquery-1.11.3.min.js:4)
at HTMLBodyElement.r.handle (jquery-1.11.3.min.js:4)
Я думаю, что это должно быть как-то связано с вложенными вызовами jQuery, но в коде есть и другие, которые, похоже, работают (по крайней мере, с префиксом «tjq.»). Как я могу даже начать отлаживать это? Что происходит?
РЕДАКТИРОВАТЬ: чтобы ответить на вопросы, заданные ниже. Прежде всего, я думал, что «dialog ()» — это виджет «dialog», который поставляется с jQuery. Оказывается, это было не так. Вот dialog.js:
function dialog(title, question, cancel, accept){
var answer = new jQuery.Deferred();
$("body").append("<div id='dialog'><div class='dialog-bg'></div><div class='dialog-window'><p class='dialog-title'>" title "</p><p class='dialog-question'>" question "</p><div class='dialog-actions'><button class='dialog-cancel'>" cancel "</button><button class='dialog-accept'>" accept "</button></div></div></div>");
$("body").css("overflow", "hidden");
$("body").on('click', '.dialog-cancel', function(){
$("body").css("overflow", "auto");
$("#dialog").remove();
answer.resolve (false);
});
$("body").on('click', '.dialog-accept', function(){
$("body").css("overflow", "auto");
$("#dialog").remove();
answer.resolve (true);
});
return answer.promise();
};
Что касается «tjq», он вызывается перед кодом, который я выдержал, в этой строке:
tjq = jQuery.noConflict();
Способ загрузки страницы:
- jQuery 1.11.3.
- jQuery-миграция 1.2.1.
- Упомянутая выше вещь «tjq».
- Пользовательский интерфейс jQuery.
Комментарии:
1. не могли бы вы опубликовать код функции диалога?
2. Как вы переопределяете
$
tjq
? Это конфигурационный файл, вы упаковываете его в IIFE?3. Ваш код вызывает
jQuery.noconflict()
где-нибудь? Если нет, то$
все еще сопоставляется с jQuery. И почему бы просто не вызвать jQuery withjQuery....
после выполнения этого вместо создания пользовательской ссылки?4. Покажите нам
dialog.js
. Кажется, вы забыли передать туда jQuery5. Извините за задержку, ребята. Я отредактировал вопрос
Ответ №1:
Хорошо, как упоминалось Антоном выше, оказывается, что я сопоставил jQuery с «tlq» вместо значения по умолчанию «$», но не изменил dialog.js чтобы объяснить это. Почему я этого не заметил? Потому что я думал, что «dialog ()» был виджетом диалогового окна jQuery по умолчанию, а не нашей собственной функцией.
Кроме того, «dialog.js » используется в другой части нашего веб-сайта, где jQuery не отображается, и там он работает нормально. Похоже, кто-то просто скопировал и вставил код и больше ничего не проверял.
Я не знаю, оставить ли этот вопрос в силе или просто удалить его; Я сомневаюсь, что другие пользователи найдут здесь какие-либо полезные ответы…