2013-05-07 4 views
0

Я использую jQuery 2.0.0, и у меня есть базовая страница с 2 ссылками. Если пользователь нажимает на ссылки для каждого из них, форма загружается через Ajax и вводится в контейнер. Раньше было возможно привязать события к будущим элементам с помощью live(), но в наши дни это должно быть возможно с on() Я думал, но он не запускает событие submit, просто если я вставляю скрипт после того, как форма была введена, он работает. В браузере я использую Firefox 20.jQuery не запускает событие после введенной формы

страницы:

<!-- Normal HTML5 head with jQuery loader //--> 
<a href="./login">Login</a> 
<!-- Normal HTML5 end //--> 

Вход (с помощью Ajax):

<form id="login" action="./login"> 
    <label for="username">Username:</label> 
    <input type="text" name="username" id="username" /> 

    <label for="password">Password:</label> 
    <input type="password" name="password" id="password" /> 

    <input type="submit" value="Login" /> 
</form> 

И, наконец, мой сценарий:

$(document).ready(function() { 

    $('a').on('click', function(e) { 
     $('body').load($(this).attr('href')); 
     e.preventDefault(); 
    }); 


    $('#login').on('submit', function(e) { 
     e.preventDefault(); 

     // Some validation and as test if event is fired 
     alert("Fired!"); 
    }); 

}); 
+0

возможно дубликат [Электропроводка на кнопку события с помощью JQuery на() не срабатывает на впрыскивается HTML с помощью Ajax вызова] (http://stackoverflow.com/questions/8756684/wiring-up-click-event -using-jquery-on-doesnt-fire-on-injected-html-via-ajax-c) – undefined

+1

'-1' Этот вопрос не показывает никаких исследований. – undefined

+0

Теперь я использую jQuery 2.0 и больше не существует метода 'live()'. Таким образом, ответ на поставленную вами тему кажется устаревшим. – David

ответ

0

I opened a bug on jQuery и кажется, что каждый должен использовать делегирование событий, например, в this example on jsFiddle:

$('#inject').on('click', function(e) { 
    $('body').html('<form id="login" action="./login"> \ 
         <label for="username">Username:</label> \ 
         <input type="text" name="username" id="username" /> \ 
         <label for="password">Password:</label> \ 
         <input type="password" name="password" id="password" /> \ 
         <input type="submit" value="Login" /> \ 
        </form>'); 
}); 

$('body').on('submit', '#login', function(e) { 
    e.preventDefault(); 

    // Some validation and as test if event is fired 
    alert("Fired!"); 
}); 
Смежные вопросы