2

大编辑 2012 年 11 月 19 日

所以,我的问题就在这里。我正在尝试使用 jQuery 和 XML 开发一个简单的购物车应用程序。

一切正常,但前提是 My pizz 的名称仅包含数字...为什么 ???

试试自己,你会发现只有“66666”披萨在起作用……为什么?

工作演示在这里

这是我的js代码:

$(document).ready(function(){
 $.ajax({
  type: "GET",
  url: "example.xml", 
  dataType: ($.browser.msie) ? "text" : "xml",
  success: function(xml) {  
   $(xml).find('row').each(function(){
    var Col0 = $(this).find('nompizz').text();
    var Col1 = $(this).find('petit').text();
    var Col2 = $(this).find('moyen').text();
    var Col3 = $(this).find('grand').text();

    $('<tr id="bar"></tr>').html('<th class="title">'+Col0+'</th><td onclick="DisPlay('+Col1+');GetName('+Col0+');">'+Col1+'€&lt;/td><td onclick="DisPlay('+Col2+');GetName('+Col0+');">'+Col2+'€&lt;/td><td onclick="DisPlay('+Col3+');GetName('+Col0+');">'+Col3+'€&lt;/td>').appendTo('#pizzas');

   });
  }
 }); 
});
function DisPlay(Figure) {   
     var Display = document.getElementById('Display');
     if (Figure === null) {
         Display.value = Figure;
     }
     else {
         Display.value += "+"+Figure;
         Screen = Display.value
         result = eval(Screen);

         Display.value =result;
     }

      Figure = null;
}
function GetName(NomPizz) {
      var $newItem = '<li>Ajouté: '+NomPizz+'</li>';
      $('.theList').append($newItem); 
}

这里是我的 XML:

<?xml version="1.0"?>
<document>
 <row>
  <nompizz>66666</nompizz>
  <petit>10</petit >
  <moyen>15</moyen >
  <grand>20</grand>
 </row>
 <row>
  <nompizz>Letters</nompizz >
  <petit>15</petit >
  <moyen>20</moyen >
  <grand>25</grand>
 </row>
</document>
4

2 回答 2

5

我认为您的问题是您的GetAnswer()功能与应用程序的其余部分无关。它不知道点击了什么。我认为最简单的做法是将nom参数添加到DisPlay()函数调用中。像这样:(删除换行符)

$('<tr id="bar"></tr>').html('<th class='+Col0+' data-item='+Col0+'>'+Col0+'</th>    <td onclick="DisPlay('+Col1+',\"'+Col0+'\")">'+Col1+'€&lt;/td>    <td onclick="DisPlay('+Col2+',\"'+Col0+'\")">'+Col2+'€&lt;/td>    <td onclick="DisPlay('+Col3+',\"'+Col0+'\")">'+Col3+'€&lt;/td>').appendTo('#pizzas');

然后你的DisPlay(Figure)变成:

function DisPlay(Figure, nom) {
    var Display = document.getElementById('Display');
    if (Figure === null) {
        Display.value = Figure;
    }
    else 
    {
        Display.value += "+"+Figure;

        //instead of this --> //GetAnswer();

        //in your old code you had some of these variables declared as non-global variables, but were using them like they were global variables
        Screen = Display.value.replace(/'/g, ' ');
        result = eval(Screen);   
        Display.value = result;
        $('.theList').append('<li>Ajouté: '+nom+'</li>');
    }
    Figure = null;
}

关于全局变量与非全局变量的一句话。如果您在函数内部“更改”某些内容,则该变量是该函数的本地变量。似乎您正在混合和匹配您的变量。有关更多信息,请阅读这篇文章。

编辑:

在您进行新编辑后,您只会获得数字披萨名称,因为您需要在适当的位置加上引号。尝试将所有内容更改GetName('+Col0+');GetName(\''+Col0+'\');

所以整行将显示为:

$('<tr id="bar"></tr>').html('<th class="title">'+Col0+'</th><td onclick="DisPlay('+Col1+');GetName(\''+Col0+'\');">'+Col1+'€&lt;/td><td onclick="DisPlay('+Col2+');GetName(\''+Col0+'\');">'+Col2+'€&lt;/td><td onclick="DisPlay('+Col3+');GetName(\''+Col0+'\');">'+Col3+'€&lt;/td>').appendTo('#pizzas');
于 2012-11-21T16:17:47.323 回答
1

实际上的问题是您的onclick函数在不带引号的情况下传递字符串,为两者加上引号,GetName('value')它将DisPlay('value')解决问题。

<td onclick="DisPlay('"+Col1+"');GetName('"+Col0+"');">'+Col1+'€&lt;/td>

问题:

如果你把字符串不带引号 js 会认为它是变量,并通过未定义变量的错误而数字将起作用,因为 int 不需要任何引号:

例如; 文本

它将执行DisPlay并将 15 作为 int 在执行GetName(Letter)时它将尝试查找Letter未定义的变量而GetName('Letter')将执行。

于 2012-11-23T05:35:22.170 回答