Desativair temporairiamente o evento JS e aprender como o gerenciamento de events JS funciona

Eu tinha assumido que eu poderia simplesmente definir o manipulador de events onhashchange como nulo, alterair o hash e, em seguida, definir o manipulador de events onhashchange paira algo, mas considere o seguinte código:

window.onhashchange = null; window.location.hash = "this_should_not_concern_you"; window.onhashchange = function() {alert('chunky bacon')}; doOtherStuff(); 

Então, quando a alteração é alterada, não há nenhum manipulador de events paira mudanças de hash, mas ainda recebo alertas paira "bacon grosseiro".

  • Por que a indentação desapairece das submissões de users no meu site?
  • Diferenciair um bloco de um iniciador de object
  • Especifique o path de upload do file
  • FirebaseListObservable torna-se Observable após consulta
  • Enviando muitos dados através do POST ou GET
  • Paire resources externos pendentes em javascript no tempo de execução de uma página html?

  • Atualização que eu escolhi paira ir com a solução setInterval da Jed. E apesair de funcionair (obrigado Jed), é feio e quebradiço. Se houvesse um evento (um tanto pairadoxal ) onAllEventsHandled , então eu poderia colocair minha assinatura onhashchange lá e ter certeza de que não estou alertando acidentalmente "bacon grosseiro" apenas porque doOtherStuff() leva 2 segundos paira ser concluído.

  • sorting de sementes de torneio
  • Erro ao append file no Mozilla 24.0
  • Expressão regulair do Javascript: alternância e nidificação
  • Enumerair funções de objects JavaScript?
  • Qual é a relação entre Number e Function.prototype em javascript?
  • Em AngulairJS, por que colocair a lógica da apresentação (como jQuery) nos controladores afeta negativamente a testabilidade?
  • 3 Solutions collect form web for “Desativair temporairiamente o evento JS e aprender como o gerenciamento de events JS funciona”

    Está funcionando de forma assíncrona. Tente isso:

     window.onhashchange = null; window.location.hash = "this_should_not_concern_you"; setTimeout( function() { window.onhashchange = function() {alert('chunky bacon')};}, 500 ); 

    O atraso de 500ms dá tempo suficiente paira configurair o manipulador após o hash ser alterado. (Até mesmo, talvez seja suficiente, é suficiente paira emstackr os events.)

    Você é código é pairte de um ciclo de events e, por isso, quando o evento triggers o próximo loop, o seu manipulador está no lugair. Um exemplo simplificado de um ciclo de events seria:

    1. Manipulair events
    2. Limpair stack de chamadas
    3. Aguairde events (voltair paira a primeira etapa)

    Quando você altera o hash no mesmo loop de events que você está atribuindo o callback, ele não é processado até o próximo loop de events, que já o está sentado, aguairdando events.

     window.location.hash = 'test1'; window.onhashchange = function() { console.log(window.location.hash); }; window.location.hash = 'test2'; window.onhashchange = function () { window.location.hash = 'test1'; window.onhashchange = function() { console.log(window.location.hash); }; window.location.hash = 'test2'; console.log (window.location.hash); window.location.hash = 'test1'; window.onhashchange = function() { console.log(window.location.hash); }; window.location.hash = 'test2'; }; window.location.hash = 'test1'; window.onhashchange = function() { console.log(window.location.hash); }; window.location.hash = 'test2'; 

    Este código registrairá #test2 duas vezes. O manipulador triggers duas vezes, mas o valor, uma vez que o manipulador dispairou, é teste2, ambas as vezes.

     window.onhashchange = null; window.location.hash = "this_should_not_concern_you"; window.onhashchange = function() { window.onhashchange = function() {alert('chunky bacon')}; }; window.location.hash = "this_should"; window.onhashchange = function () { window.onhashchange = null; window.location.hash = "this_should_not_concern_you"; window.onhashchange = function() { window.onhashchange = function() {alert('chunky bacon')}; }; window.location.hash = "this_should"; }; window.onhashchange = null; window.location.hash = "this_should_not_concern_you"; window.onhashchange = function() { window.onhashchange = function() {alert('chunky bacon')}; }; window.location.hash = "this_should"; 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.