Eu tenho um problema com .on()
. Eu tenho vários elementos de formulário (formulários com class="remember"
), também adiciono outro form.remember
usando AJAX. Então, eu quero lidar com o evento submit algo como:
$('form.remember').on('submit',function(){...})
mas o formulário adicionado com AJAX não funciona com ele.
Onde está o problema? É um bug?
$(document).on('submit','form.remember',function(){...})
document
pelo pai estático mais próximo.Respostas:
Você precisa delegar o evento ao nível do documento
$('form.remember').on('submit'
funcionam da mesma forma,$('form.remember').submit(
mas quando você usa$(document).on('submit','form.remember'
, também funcionará para o DOM adicionado posteriormente.fonte
$(document).on
tem um desempenho muito inferior a$('form.remember').on('submit'
. Agora, ele precisa ouvir todos os eventos de envio no documento. É muito melhor restringir um pouco o escopo do que ouviron
document
, se possívelTive um problema com os mesmos sintomas. No meu caso, descobri que minha função de envio estava faltando a instrução "return".
Por exemplo:
fonte
return false;
não enviaremos o formulário. Para enviar o formulário usereturn true;
.O problema aqui é que o "on" é aplicado a todos os elementos que existem NO MOMENTO. Ao criar um elemento dinamicamente, você precisa executar o on novamente:
Como os formulários geralmente têm nomes ou IDs, você também pode anexar ao novo formulário. Se estou criando muitas coisas dinâmicas, incluirei uma função de configuração ou ligação:
Então, sempre que você cria algo (botões geralmente no meu caso), eu apenas chamo bindItems para atualizar tudo na página.
Eu não gosto de usar 'body' ou elementos de documento porque com guias e modais eles tendem a ficar por aí e fazer coisas que você não espera. Eu sempre tento ser o mais específico possível, a menos que seja um projeto simples de 1 página.
fonte