Функция JQuery не вызывается внутри функции AJAX - PullRequest
0 голосов
/ 13 сентября 2011

Поэтому я пытаюсь отключить ссылки на некоторые <li> элементы, которые были загружены с другой страницы с помощью функции .load(), но по какой-то причине я не могу повлиять на эти элементы списка.

var from_post = false; 

$(document).ready(function() {
    //so this is the function that loads in data from another page
    $("#gallery").load('http://localhost/index.php/site/gallerys_avalible/ #gallerys_avalible'), function() {
        console.log('hello');
        // sense there are no other li elliments on the page i thought this
        // would be okay. but this function never gets called, i've moved it
        // all over i just recently attached it to the load function thinking
        // that maybe if the load was not complete it would not run, but i
        // have had no luck.
        $('li').click(function (e) {
            e.preventDefault();
            console.log("I have been clicked!");
            return false;
        });
    };


    $('#addNew').click(function () {
        console.log('i got called');
        $('#new_form').fadeIn(1000); 
    });

    $('form').submit(function() {

        if(from_post) {

           //submit form
            return true; 

        } else {

            //dont submit form. 
            return false; 

        }
    });

любая помощь будет принята с благодарностью, о, и еще, я могу запустить эту функцию через firebug, и она работает на 100% нормально.так я в тупик.

Ответы [ 3 ]

4 голосов
/ 13 сентября 2011

Вы закрываете свой звонок на .load() слишком рано.У вас есть:

$("#gallery").load('http://...'), function() {

Это просто вызывает load, а затем объявляет функцию.Но эта функция не связана с обработчиком success и никогда не будет выполнена.Вам нужно, чтобы ) был на другой стороне объявления функции, чтобы функция была включена в качестве параметра для вашего вызова для загрузки:

$("#gallery").load('http://...', function() {
    ...
});

Исправьте это, и ваш код работает: http://jsfiddle.net/gilly3/WdqDY/

2 голосов
/ 13 сентября 2011

Попробуйте обозреватель событий, ориентированный на будущее, например, в режиме реального времени или делегат:

$('li').live('click', function(){})

, или этот метод предпочтителен, если вы знаете родителя:

$('#gallery').delegate('li','click',function(){})

Причина, по которой это необходимоВаши события кликов привязываются к элементам, которые находятся на странице во время привязки.Любые добавленные позже li не увидят того связывания, как работает live или делегат.Они привязываются к родительскому узлу и пересекают дочерние узлы каждое событие (в данном случае щелкните), чтобы проверить, применимо ли это событие к существующему дочернему элементу.

1 голос
/ 13 сентября 2011

Используйте .live('click', ...) или .delegate() вместо .click(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...