2

ビッグエディット2012/11/19

だから、私の問題はここにあります。jQueryとXMLを使用してシンプルなカートアプリを開発しようとしています。

すべてがOKですが、私のピザの名前に数字しか含まれていない場合に限ります...なぜ???

自分で試してみてください。「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;
}

グローバル変数と非グローバル変数について一言。関数内で何かを「var」すると、その変数はその関数に対してローカルになります。あなたはあなたの変数を混ぜ合わせていたようです。詳細については、この投稿をお読みください。

編集:

新しい編集の後は、適切な場所に引用符を付ける必要があるため、ピザの名前は数字でしか表示されません。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され、実行中にintとして15を取り、実行中に未定義の変数をGetName(Letter)見つけようとします。LetterGetName('Letter')

于 2012-11-23T05:35:22.170 に答える