#jquery #jquery-ui #events #tabs
#jquery #jquery-ui #Мероприятия #вкладки
Вопрос:
Я использую пример пользовательского интерфейса Jquery для управления вкладками, как на этой страницеhttp://jqueryui.com/demos/tabs/#manipulation . Если при создании первой вкладки и создании переменной в событии добавления, а затем записи alert (var_created) в событии show не создается вкладка, сообщающая, что переменная не определена, со второй, ther и так далее вкладками проблем нет.
Я создал скрипт в jsfiddle для его отображения:
теперь он должен напечатать предупреждение, но это не работает, и если вы попытаетесь, вы можете увидеть ошибку с jslint, которая сообщает, что var не определенhttp://jsfiddle.net/paglia_s/5GU8M/1 /
Есть способ избежать этого?
Ответ №1:
удалить var
var var1 = «try»; должно быть var1 = «try»;
Я исправил это по вашей ссылке http://jsfiddle.net/5GU8M/4 /
Для наглядности, вот объяснение :
если вы используете ‘var myvar = 1’, переменная будет активна только ВНУТРИ функции, в которой она используется.
если вы объявите только ‘myvar = 1’, переменная будет глобальной и будет работать вне вашей функции jquery, и вы сможете вызвать ее из любого места скрипта.
Комментарии:
1. хорошо, но проблема в другом, поэтому при создании первой вкладки она не работает, как вы можете видеть по вашей ссылке
2. Очевидно, вы или кто-то отредактировал его обратно. jsfiddle.net/6fH4v вот форк, попробуйте использовать форк, вы увидите предупреждение.
3. вы уверены в ссылке? это работает как и раньше, единственное отличие заключается в том, что теперь var для var1 отсутствует
Ответ №2:
Я не знаю jsFiddle. Сохраняются ли мои изменения автоматически?
Вы должны определить переменную в верхней области видимости. В противном случае этот параметр не определен снаружи.
Я сделал следующее:
var var1 = "";
$(function() {
var $tab_title_input = $("#tab_title"),
$tab_content_input = $("#tab_content");
var tab_counter = 0;
// tabs init with a custom tab template and an "add" callback filling in the content
var $tabs = $("#tabs").tabs({
tabTemplate: "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close'>Remove Tab</span></li>",
add: function(event, ui) {
var tab_content = $tab_content_input.val() || "Tab " tab_counter " content.";
$(ui.panel).append("<p>" tab_content "</p>");
var1 = "try";
},
show: function(event, ui) {
alert(var1);
}
});
Комментарии:
1. В jsFiddle вверху есть кнопка сохранить. Если вы нажмете на это, вы попадете на новый URL, которым вы можете поделиться здесь и который содержит код, который у вас был, когда вы нажимали кнопку сохранить.
Ответ №3:
На самом деле есть пара проблем, которые вам нужно понять: область действия переменной и порядок выполнения.
Область действия переменной: переменные, объявленные с помощью var
, являются локальной областью действия (для ближайшей функции). Переменные, объявленные без var
, являются глобальной областью.
Порядок выполнения: Когда вкладка добавляется к элементу управления jQuery Tabs без какой-либо существующей вкладки, tabsshow
событие выполняется перед tabsadd
событием. Таким образом, var1
не будет определено при добавлении первой вкладки, отсюда и ошибка переменной undefined.
Вы можете просто проверить, определено ли var1
перед его использованием:
if (typeof(var1) !== 'undefined') alert(var1);
Или измените свой код.
Смотрите пример: http://jsfiddle.net/william/6fH4v/1 /.