Приносим извинения, если этот вопрос задавали раньше - я искал и не нашел ничего, что точно соответствовало бы тому, что я вижу.
Вот ситуация: я использую вкладки jQuery UI для выбора изображений на странице. Для одной из вкладок желаемый результат - перейти по ссылке для этой вкладки, открыть ее на новой вкладке браузер (я постараюсь прямо здесь использовать слово «вкладка») и игнорировать остальную часть пользовательского интерфейса. Код вкладок. По сути, я хочу, чтобы вкладки создавали визуальную вкладку для выбора, но не выполняли обычную обработку jQuery, которая происходит при нажатии на эту конкретную вкладку. Для других вкладок поведение вкладок пользовательского интерфейса по умолчанию подходит.
Я решил, что могу присоединить событие к этой вкладке и вызвать event.stopPropagation (), который предотвратит всплытие кода пользовательского интерфейса, а затем позволит ему пропустить и принять ссылку (событие щелчка для вкладок находится на ' тег '). Я настроил его так, чтобы мой код события был первым в строке, он выполнялся перед кодом пользовательского интерфейса и предотвращал запуск кода пользовательского интерфейса.
Однако, если я сделаю это, я увижу в консоли следующее сообщение:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at [link] (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
(Примечание: ссылка ведет на интерактивную страницу в другом домене, что является основной причиной, по которой я открываю новую вкладку браузер)
Новая вкладка браузера не открывается, и я остаюсь с выбранной вкладкой с пустым содержимым ниже.
Если я сделаю "window.open" для ссылки перед stopPropagation и добавлю event.preventDefault (), я получу результат открытия страницы в новой вкладке браузера, но все равно вижу сообщение об ошибке. Из-за некоторых толстых пальцев я также заметил, что если у меня есть неопределенная функция в коде события щелчка, она также имеет желаемую реакцию.
В любом случае, есть ли что-то глупое, чего я здесь не вижу? Должен ли я просто быть доволен решением, которое дает мне результирующее поведение, но с сообщением об ошибке?
Большое спасибо!
Итак, как я и подозревал, я все сделал неправильно. Отнесите это к новичку в jQuery UI.
Пользовательский интерфейс предоставляет событие beforeActivate (), которое делает именно то, что я хочу. Внутри функции я могу проверить, имеет ли предлагаемая новая вкладка класс, который я назначаю для обозначения «переход по ссылке», выполнить вызов окна для создания новой вкладки браузера, а затем вернуть false, чтобы пользовательский интерфейс знал, что я не делаю этого. Не хочу, чтобы вкладка была активирована. В противном случае функция возвращает истину.
При дальнейшем рассмотрении обработчики событий пользовательского интерфейса jQuery запускаются - вот почему я выбрал именно эту вкладку. Ошибка перекрестного происхождения имеет смысл, поскольку тег «a» указывает за пределы моего домена. Поэтому, несмотря на то, что я вызвал stopPropagation и после этого isPropagationStopped имеет значение TRUE, код пользовательского интерфейса jQuery все еще выполняется.