Como forçar programaticamente um evento onchange em uma entrada?
Eu tentei algo como isto:
var code = ele.getAttribute('onchange');
eval(code);
Mas meu objetivo final é acionar qualquer função de ouvinte, e isso não parece funcionar. Também não atualiza apenas o atributo 'value'.
javascript
Soldarnal
fonte
fonte
var evt = document.createEvent('CustomEvent'); evt.initCustomEvent('input', true, false, { }); elem.dispatchEvent(evt);
No jQuery eu uso principalmente:
fonte
ugh não use eval para nada . Bem, existem certas coisas, mas são extremamente raras. Em vez disso, você faria o seguinte:
Procure aqui mais opções: http://jehiah.cz/archive/firing-javascript-events-properly
fonte
new Event(...)
edispatchEvent
é a solução certa hoje em dia, ao que parece.Element.addEventListener
manipular eventos. Para alcançá-lo de uma maneira moderna, consulte a resposta de @ Miscreant.Por alguma razão, ele.onchange () está lançando uma exceção de "método não encontrado" para mim no IE na minha página, então acabei usando essa função no link fornecido por Kolten e chamando fireEvent (ele, 'change'), que funcionava :
No entanto, criei uma página de teste que confirmou que a chamada deveria onchange () funcionar:
Edit: A razão pela qual ele.onchange () não funcionou foi porque eu realmente não havia declarado nada para o evento onchange. Mas o fireEvent ainda funciona.
fonte
element.dispatchEvent(new Event('change', true, true))
em vez de tudo o que arcanos e principalmente obsoletacreateEvent
einitEvent
material.Esta é a resposta mais correta para o IE e o Chrome:
fonte
Retirado da parte inferior do QUnit
É claro que você pode substituir o material $ .browser pelos seus próprios métodos de detecção do navegador para torná-lo independente do jQuery.
Para usar esta função:
Isso basicamente dispara o evento DOM real como se algo tivesse realmente mudado.
fonte
Se você adicionar todos os seus eventos com este trecho de código:
então você pode simplesmente usar
element.on<EVENTNAME>()
onde<EVENTNAME>
está o nome do seu evento e chamará todos os eventos com<EVENTNAME>
fonte
Para acionar qualquer evento em Javascript.
fonte
se você estiver usando jQuery, você teria:
ou MS AJAX:
Ou no HTML bruto do elemento:
Depois de reler a pergunta, acho que não li o que deveria ser feito. Nunca encontrei uma maneira de atualizar um elemento DOM de maneira a forçar um evento de mudança. O melhor é fazer um método de manipulador de eventos separado, como este:
Como você já está escrevendo um método JavaScript que fará a alteração, são necessárias apenas 1 linha adicional.
Ou, se você estiver usando a estrutura Microsoft AJAX, poderá acessar todos os manipuladores de eventos através de:
Isso permitiria que você fizesse algumas ações no estilo de reflexão para encontrar os manipuladores de eventos certos a serem disparados.
fonte
Usando o JQuery, você pode fazer o seguinte:
fonte