JQuery-как обрабатывать событие как параметр функции щелчка

У меня есть событие щелчка, с которым связано мое действие по переходу на определенный URL-адрес, а затем показать/скрыть кнопку. Я использую это:

ViewManager.js

$("#btn").on("click", function(event){
    window.location.href= '#test.html';
 }

и после того, как я перейду на эту страницу, у меня есть кнопка, которую мне нужно скрыть в зависимости от target.id (в данном случае это btn). Если btn является идентификатором цели, я скрываю кнопку, иначе я показываю кнопку, как показано ниже:

account.js

if (event.target.id == 'btn'){
        $('#submit-account-detail').css('display', 'none');
        else {
       $('#submit-account-detail').css('display', 'block');
        }

Теперь проблема в том, что хром отлично обрабатывает глобальное событие, но firefox выдает ошибку:

ReferenceError: event is not defined

Я передал событие в качестве параметра, прежде чем перейти к другому URL-адресу. Поскольку firefox не обрабатывает события глобально, он выдает ошибку. Я попытался найти источники, и они предложили передать событие в качестве параметра для события клика (уже сделано). но как сделать событие видимым после навигации по страницам?

РЕДАКТИРОВАТЬ-------------------

Я сделал что-то подобное в сценарии ViewManager.js: $("#btn").on("click", function(event){ targetId = window.event; window.location.href= '#test.html'; }

а затем я проверил условие в сценарии account.js:

if (targetId && targetId === 'btn'){
            $('#submit-account-detail').css('display', 'none');}

он отлично работает, когда у него определен targetId, но выдает ReferenceError: targetId is not defined, когда он targetId != 'btn'... Я неправильно объявляю переменную??


person user1234    schedule 05.10.2014    source источник
comment
Где объявлен ваш глобальный event? Вы показали нам параметр функции, который является локальным для этой функции. Он ни в коем случае не может быть доступен для кода в другом файле сценария.   -  person Bergi    schedule 06.10.2014
comment
как и где я могу объявить его? будет ли так: window.event = ''??   -  person user1234    schedule 06.10.2014
comment
Вы переходите на другую страницу или к элементу/якорю на текущей странице? Если это другая страница, вы не можете сделать это через переменную JS, потому что даже глобальные переменные активны только на текущей странице. Если это навигация по текущей странице, почему вы не можете показывать/скрывать свою кнопку в исходном обработчике кликов?   -  person nnnnnn    schedule 06.10.2014
comment
я на самом деле перемещаюсь из оверлейного сообщения с кнопкой, по нажатию которой я перехожу на вышеупомянутую страницу.. я не смогу показать/скрыть в исходном обработчике кликов, потому что эта кнопка недоступна на этой странице..   -  person user1234    schedule 06.10.2014


Ответы (1)


Вы не можете иметь более старый объект события на новой странице после навигации по странице. Тем не менее, вы можете передать информацию о последнем событии в запросе на получение или установив cookie.

Здесь кажется, что вы просто меняете хэш местоположения. Правильный способ сделать это window.location.hash = "#something". В этом случае ваша страница фактически не перезагружается. Это означает, что если вы установите глобальную переменную, вы сможете получить к ней доступ из какой-либо другой функции.

Существует более одного способа определения глобальной переменной.

  1. напишите var varname вне любой функции и установите varname в любом месте с любым значением, которое вы хотите.
  2. Установите window.varname в любом месте с любым значением.

Вы можете использовать эту переменную, просто используя varname, если у вас нет другой локальной переменной с таким же именем.

В вашем случае попробуйте установить window.event = event в обработчике событий.

person nisargjhaveri    schedule 05.10.2014
comment
я попробовал это, и это работает для истинного состояния, однако, как я могу обработать событие глобально, чтобы передать все условия ?? РЕДАКТИРОВАТЬ выше.. Спасибо!!! - person user1234; 06.10.2014
comment
Какие еще условия? В идеале вы не должны объявлять событие как глобальную переменную, но если вам нужно это сделать, я бы предложил использовать какое-то другое имя, например myevent или что-то в этом роде, и использовать его явно всякий раз, когда вы хотите использовать данные этого события. - person nisargjhaveri; 06.10.2014
comment
Или вы можете просто сохранить event.target.id в глобальной переменной. - person nisargjhaveri; 06.10.2014
comment
другие условия, когда целевой идентификатор исходит не из оверлея, а при нажатии какой-либо другой кнопки, в этом случае цель события терпит неудачу... поскольку я объявляю window.event в функции обработчика событий. - person user1234; 06.10.2014
comment
где я могу объявить event.target.id в своем скрипте?? Спасибо - person user1234; 06.10.2014
comment
О, туда. Объявите window.targetId или что-то в обработчике событий. Затем проверьте, определен ли targetId и установлен ли он в «btn». - person nisargjhaveri; 06.10.2014
comment
Вы можете сделать это if (targetId && targetId === 'btn') - person nisargjhaveri; 06.10.2014
comment
почти сделал это ... и это сработало, за исключением того, что снова выдало ошибку на странице, где targetId не был установлен на «btn», я показал в РЕДАКТИРОВАТЬ выше.. я неправильно установил var ?? - person user1234; 06.10.2014
comment
Давайте продолжим обсуждение в чате. - person nisargjhaveri; 06.10.2014