2 yishuixs yishuixs 于 2015.07.19 01:09 提问

ajax学习的一点小问题

在xml文件里我编辑了不少CD便签,如下

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<CATALOG>
    <CD>
        <TITLE>Empire Burlesque</TITLE>
        <ARTIST>Bob Dylan</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>Columbia</COMPANY>
        <PRICE>10.90</PRICE>
        <YEAR>1985</YEAR>
    </CD>
    <CD>
        <TITLE>Hide your heart</TITLE>
        <ARTIST>Bonnie Tyler</ARTIST>
        <COUNTRY>UK</COUNTRY>
        <COMPANY>CBS Records</COMPANY>
        <PRICE>9.90</PRICE>
        <YEAR>1988</YEAR>
    </CD>
    <CD>
        <TITLE>Unchain my heart</TITLE>
        <ARTIST>Joe Cocker</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>EMI</COMPANY>
        <PRICE>8.20</PRICE>
        <YEAR>1987</YEAR>
    </CD>
</CATALOG>

在html里用循环点击表格显示某行详细时显示错误,除非将调用_displayCDInfor()函数里的参数设置为"+i+"才可以正常显示,全部代码如下

 <!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ajax</title>
</head>
<body onload="_displayCD()">
<script>
    if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    }else{
        xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
    }
    xmlhttp.open('GET','cd_catalog.xml',false);
    xmlhttp.send();
    var xmlDoc = xmlhttp.responseXML;

    var x = xmlDoc.getElementsByTagName('CD');

    function _displayCDInfo(i){
        artist=(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
        title=(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
        year=(x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue);
        country=(x[i].getElementsByTagName("COUNTRY")[0].childNodes[0].nodeValue);
        company=(x[i].getElementsByTagName("COMPANY")[0].childNodes[0].nodeValue);
        price=(x[i].getElementsByTagName("PRICE")[0].childNodes[0].nodeValue);
        txt="Artist: "+artist+"<br />Title: "+title+"<br />Year: "+year+"<br />Country: "+country+"<br />Company: "+company+"<br />Price: "+price  ;
        document.getElementById("showCD").innerHTML = txt;
    }
</script>
<div id="showCD"></div>
<script>
    document.write("<table border='1'>");
    for(var i=0; i < x.length; i++){
        document.write("<tr onclick='_displayCDInfo("+i+")'>");
        document.write('<td>');
        document.write(x[i].getElementsByTagName('ARTIST')[0].childNodes[0].nodeValue);
        document.write('</td><td>');
        document.write(x[i].getElementsByTagName('TITLE')[0].childNodes[0].nodeValue);
        document.write('</td></tr>');
    }
    document.write('</table>');
</script>
</body>
</html>

请问为何要将< tr >标签里_dispalyCDInfo()函数的参数设置为"+i+",设置成i反而不正确?

3个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.07.19 01:13
已采纳
 document.write("<tr onclick='_displayCDInfo("+i+")'>");
 这么写,如果i等于0就是
 document.write("<tr onclick='_displayCDInfo(0)'>");
 等于1就是
 document.write("<tr onclick='_displayCDInfo(1)'>");
 如果直接写i
 document.write("<tr onclick='_displayCDInfo(i)'>");,这么i就是字符i,和循环中i的值没有任何关系。
danielinbiti
danielinbiti 回复yishuixs: "<tr onclick='_displayCDInfo(" 这不是字符串嘛
2 年多之前 回复
yishuixs
yishuixs 回复danielinbiti: 想不通,i附近有没有其他字符串,它与谁拼贴啊
2 年多之前 回复
danielinbiti
danielinbiti 回复yishuixs: 加号是字符串连接。
2 年多之前 回复
yishuixs
yishuixs 回复danielinbiti: 这个,+i+看起无法接受啊,既然是拼贴,它与谁进行了拼贴啊?而且,既然要变成字符串,那么直接写"i"不就可以了,何必要写两个+呢
2 年多之前 回复
danielinbiti
danielinbiti 回复yishuixs: 这就是字符拼接呀,这样i在循环的之后就是拼接它的值,也就是"+0+","+1+",....
2 年多之前 回复
yishuixs
yishuixs 回复danielinbiti: 哦,那么"+i+"是什么,在js里有这种格式定义的吗?
2 年多之前 回复
danielinbiti
danielinbiti 回复yishuixs: 你这里tr是多行,也就是i要多个值,你这么写,如果上面代码是完整的话,那就都是x.length这个数值,不会是你想象的0,1,2...到x.length
2 年多之前 回复
danielinbiti
danielinbiti 回复yishuixs: <tr onclick='_displayCDInfo(i)'>"),这么写,点击的时候,传入_displayCDInfo的参数就是i,不是具体的值。
2 年多之前 回复
yishuixs
yishuixs 可是在<tr onclick='_displayCDInfo(i)'>")里的i是循环变量啊,难道在事件句柄语句里不支持循环变量?
2 年多之前 回复
guwei4037
guwei4037   Ds   Rxr 2015.07.19 14:23

document.write("

");

i是一个定义的变量,可以根据i值的不同,输出不同的值。

CSDNXIAON
CSDNXIAON   2015.07.19 01:12

ajax一点小问题
一点小问题
学习hibernate的一点小问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片