Jquery .click从循环中显示正确的值

时间:2015-05-31 04:58:28

标签: jquery ajax xml

我有一个电影列表,当我点击一个标题时,我希望它将从该电影标题的XML页面中提取的数据显示到一个新窗口。

我正在循环浏览xml文件以获取电影列表

$(xml).find('movie').each(function () {
            //Adding the movie title.
            $("body").append("<section class = 'list' id='m" + n + "'><p>" + $(this).attr("name") + "</p></section>");
例如,我的第一部电影是&#34;终结者2审判日&#34;

我的最后一次尝试是使用一个数组..但它仍然只为我点击的每个标题显示相同的标题,这是第一个,终结者。

$(xml).find('movie').each(function () {
            //Adding the movie title.
            $("body").append("<section class = 'list' id='m" + n + "'><p>" + $(this).attr("name") + "</p></section>");
            //adding movie website link
            $("#m" + n).append("<a href='" + $(this).find("website").text() + "'>" + $(this).attr("name") + "'s website</a> <br />");
            //adding other movie info in new window
            info.push(($(xml).find("movie").attr("name")));
            $("#m" + n+" p").click(function () {
                mWindow = window.open("", "", "width=500,height=500");
                mWindow.document.write(info[info.length-1]);
});
n++
});

3 个答案:

答案 0 :(得分:1)

更改

info.push(($(xml).find("movie").attr("name")));

info.push($(this).attr("name"));

...将循环中当前项的name属性插入到该数组中,而不是$(xml).find('.movie')

中第一个匹配结果中的name属性

编辑:这是您可能正在寻找的不同方法:

$(xml).find('movie').each(function (i, elm) {        
        var $movie = $(elm),
            $section,
            movie = {
                id: 'm' + id,
                name: $movie.attr('name'),
                website: $movie.find('website').text()
            };

        $section = $('<section class="list" id="' + movie.id + '"><p>' + movie.name + '</p><a href="' + movie.website + '">' + movie.name + '\'s website</a><br></section>');
        $section.data('movie', movie);
        $('body').append($section);
});

$('body').on('click', 'section.list p', function (e) {
    var $section = $(e.target).closest('section.list'),
        movie = $section.data('movie'),
        popupText;

    popupText = movie.name + ', ' + movie.website;

    mWindow = window.open("", "", "width=500,height=500");
    mWindow.document.write(popupText);
});

首先,它循环遍历$(xml),在其中为每部电影创建并附加section。然后,使用.data()

将一些电影数据附加到该节元素

在循环之后,它会绑定一个点击事件监听器,它会检测点击目标中最近的部分,抓取它的数据并做一些进一步的操作,比如打开弹出窗口popupText

中指定的文字

希望它有所帮助。

答案 1 :(得分:0)

试试这个,我把它放在小提琴上

https://jsfiddle.net/Lg77ekoa/8/

简单的window.open()并从主页面向弹出窗口发送字符串。你可以发送任何东西,这只是一个例子

HTML

 <a onclick="show1(this)" id="titanic">Titanic</a>
 <br/>
 <a onclick="show1(this)" id="Tropic Thunder">Tropic Thunder</a>
 <br/>
 <a onclick="show1(this)" id="Hangover">Hangover</a>

的Javascript

 function show1(elem) {
    var myWindow = window.open("", "", "width=200, height=100");
    myWindow.document.body.innerHTML = $(elem).attr("id");

}

答案 2 :(得分:0)

我明白了。

info[n] = ($(this).attr("name")) + more information...
function cHandle(num) {
                    $("#m" + n + " p").click(


 function () { mWindow = window.open("", "", "weight = 500, height=500"); mWindow.document.write(info[num]) }
                    )
            }
            cHandle(n);

现在n正在正确地传递给点击功能。