Ajax-запрос и конфликт JQuery - PullRequest
0 голосов
/ 15 июня 2011

У меня есть gallery.php, который загружает изображения с путем src из базы данных.
У меня также есть внешний main.js, который обнаруживает щелчок на .thumbnail.

Все работает безупречно, пока я не загружаю различные изображения (другую категорию изображений, другой набор) через ajax. (функция load() в jquery) Все выглядит хорошо, но возникает проблема с javascript.

После этого я не могу получить атрибут src моего эскиза. Вот что я имею в виду.

ДО AJAX

Категория 1 картинки / миниатюры

<a class="thumbnail"><img src="ressources/images/image1Small.jpg" /></a>';
<a class="thumbnail"><img src="ressources/images/image2Small.jpg" /></a>';
<a class="thumbnail"><img src="ressources/images/image3Small.jpg" /></a>';

И так далее ...

ПОСЛЕ AJAX CALL

Категория 2 картинки / миниатюры

<a class="thumbnail"><img src="ressources/images/image4Small.jpg" /></a>';
<a class="thumbnail"><img src="ressources/images/image5Small.jpg" /></a>';
<a class="thumbnail"><img src="ressources/images/image6Small.jpg" /></a>';

Как видите, все как прежде. Тег имеет тот же класс, что и старый набор картинок. Но когда я вызываю функцию, содержащую:

var path = $(this).children().attr("src");

Теперь возвращается: undefined вместо ressources/images/imageXSmall.jpg

Я попытался проверить, вернул ли $(this) что-то еще после, но безуспешно.

Мне было интересно, если при загрузке внешнего файла .php через jquery.load () связь между вновь созданными тегами <a class="thumbnail"> и main.js была потеряна. Как если бы мне пришлось перезагрузить main.js после функции jquery.load(). Или что-то в этом роде ...

Спасибо!

РЕДАКТИРОВАТЬ Вот код:

  • При переходе по ссылке на разные категория
    .linkSubCat разных категорий

    $ ( "linkSubCat. ") Нажмите (функция () {loadImages ($ (это) .attr (" ID"));});.

, затем

function loadImages(pCategory) {
    switch (pCategory) {
        case "subCat00":
            $(".pics").load('loadImages.php',{category:0});
            break;
        case "subCat01":
            $(".pics").load('loadImages.php',{category:1});
            break;
        case "subCat02":
            $(".pics").load('loadImages.php',{category:2});
            break;
        case "subCat03":
            $(".pics").load('loadImages.php',{category:3});
            break;
        default:
            $(".pics").load('loadImages.php',{category:0});
            break;
    }
}

loadImages.php

<?php
    $connection = mysql_connect("localhost","root", "") or die("Error Connecting : " . mysql_error());

    if (!mysql_select_db("taktak")) die('Error connecting to database : ' . mysql_error());

    function createThumbPHP() {
        if(isset($_POST['category'])) {
            if($_POST['category'] == 0){
                $imageQuery = mysql_query("SELECT * FROM t_pictures WHERE p_category = 0");
                $thumbHtml = '';

                while ($tempImageQueryFetch = mysql_fetch_assoc($imageQuery)){
                    $thumbHtml .= '<a href="#" class="thumbnail"><img src="ressources/images/' . $tempImageQueryFetch["p_fileName"] . 'Small.jpg" /></a>';
                }
            }elseif($_POST['category'] == 1){
                $imageQuery = mysql_query("SELECT * FROM t_pictures WHERE p_category = 1");
                $thumbHtml = '';

                while ($tempImageQueryFetch = mysql_fetch_assoc($imageQuery)){
                    $thumbHtml .= '<a href="#" class="thumbnail"><img src="ressources/images/' . $tempImageQueryFetch["p_fileName"] . 'Small.jpg" /></a>';
                }
            }elseif($_POST['category'] == 2){
                $imageQuery = mysql_query("SELECT * FROM t_pictures WHERE p_category = 2");
                $thumbHtml = '';

                while ($tempImageQueryFetch = mysql_fetch_assoc($imageQuery)){
                    $thumbHtml .= '<a href="#" class="thumbnail"><img src="ressources/images/' . $tempImageQueryFetch["p_fileName"] . 'Small.jpg" /></a>';
                }
            }elseif($_POST['category'] == 3){
                $imageQuery = mysql_query("SELECT * FROM t_pictures WHERE p_category = 3");
                $thumbHtml = '';

                while ($tempImageQueryFetch = mysql_fetch_assoc($imageQuery)){
                    $thumbHtml .= '<a href="#" class="thumbnail"><img src="ressources/images/' . $tempImageQueryFetch["p_fileName"] . 'Small.jpg" /></a>';
                }
            }
        return $thumbHtml;
        }
        else {
            $errorMSG = "Error Loading Images";
            return $errorMSG;
        }
    }

    echo createThumbPHP();
?>

Так что все делает то, что должно. Здесь проблема. Этот код JavaScript в main.js:

$(".thumbnail").click(
            function(){
                $('#imageBig img').remove();

                var path = $(this).children().attr("src");
                var newPath = path.substring(0, path.length-9);
                var newPath2 = newPath += ".jpg";

                var imageLoad = new Image();

                $(imageLoad).load(function () {
                    if (--imageLoad == 0) {
                        // ALL DONE!
                    }
                    // anything in this function will execute after the image loads
                    $('#loader').hide();
                    var newImg = $('<img />').attr('src',$(this).attr('src'));
                    $('#imageBig').append( $(newImg) ); // I assume this is the code you wanted to execute
                })
                .attr('src',newPath2);
            }
        )  

Удаляет img в #imageBig, но, похоже, не получает путь к $(this).children().attr("src"); Этот скрипт отлично работал до того, как я загрузил разные миниатюры (даже с одинаковыми настройками (классы, порядок, ...))

1 Ответ

2 голосов
/ 15 июня 2011

Попробуйте использовать привязку события jQuery "live" , например,

вместо этого

$ ( "Ленфильм"). Нажмите (

используйте это

$('.thumbnail').live('click',

При использовании обычных связывателей событий (например, $.click()), обработчик привязывается только к тем элементам, которые совпадают во время вызова. Когда вы загружаете новые элементы через AJAX, они не будут связаны.

Из руководства по jQuery

Прикрепите обработчик к событию для всех элементов, которые соответствуют текущему селектору, сейчас и в будущем.

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