Обновление: Решение, которое я опубликовал, не решает проблему, которую я описал, ^^ будет публиковаться снова, если я вспомню, когда решу ее.
Обновление 2: я "решил" проблему на данный момент (см. Ниже).
Вопрос немного староват, но если кто-то и наткнется на этот вопрос, как я, то быстрое изменение Джастина Хамаде к вышеуказанному решению может помочь некоторым людям.
Если вы используете событие externalChange Jquery Address вместо «change», это предотвращает отправку лишнего запроса (в моем случае это приводит к ошибке в консоли javascript). Это потому, что если кто-то нажимает на вкладку, адрес меняется самостоятельно (благодаря jquery ui), это изменение вызывает $ .address.change один раз, что выбирает вкладку, даже если jquery-ui уже сделал это ... По крайней мере, я Подумай вот что.
Также мне не понравились вкладки, создающие хэши, такие как "# ui-tab-2", "# ui-tab-3" и т. Д., Поэтому я использовал следующий код, который заставляет URL использовать имена элементов привязки как хэши (то есть "www.example.com # cool_stuff" вместо "www.example.com # ui-tab-2"):
$(function() {
$( "#tabs" ).tabs({
cache: false,
});
// For forward and back
$.address.externalChange(function(event){
var name = window.location.hash != "" ? window.location.hash.split("#")[2] : ""
$("#tabs").tabs( "select" , $("#tabs a[name="+ name + "]").attr('href') )
});
// when the tab is selected update the url with the hash
$("#tabs").bind("tabsselect", function(event, ui) {
$.address.hash(ui.tab.name);
});
});
Однако, A) Я новичок в jquery и не уверен, что это эффективно / безопасно / «Правильный способ сделать это», и B) Обязательно используйте это, только если вы можете быть уверены, что атрибут «name» из якорей нет символов, которые не являются безопасными URI (то есть пробел).
Update2: я «решил» проблему в Update1, но у него ужасно страшная строка:
var name = window.location.hash != "" ? window.location.hash.split("#")[2] : ""
Поскольку, очевидно, функция $ .address.hash (val) добавляет «/ #» после первого хеша, но если мы не используем $ .address.hash (val), то externalChange срабатывает (по окну. location.hash = значение)