El misterio de jQuery & XML obtiene Dígitos NOT Letters

BIG EDIT 19/11/2012

Entonces, mi problema está aquí. Estoy tratando de desarrollar una aplicación de carrito simple con jQuery y XML.

Todo está bien, pero solo si el nombre de My pizz solo contiene números … ¿POR QUÉ?

Pruébalo, verás que solo la pizza “66666” está funcionando … ¿POR QUÉ?

DEMO DE TRABAJO AQUÍ

Aquí está mi código 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(); $('').html(''+Col0+''+Col1+'€'+Col2+'€'+Col3+'€').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 = '
  • Ajouté: '+NomPizz+'
  • '; $('.theList').append($newItem); }

    Y aquí mi XML:

        66666 10 15 20   Letters 15 20 25   

    Creo que su problema es que su función GetAnswer() es GetAnswer() del rest de la aplicación. No sabe en qué se hizo clic. Creo que lo más fácil sería simplemente agregar el parámetro nom a su llamada a la función DisPlay() . De esta manera: (eliminar los avances de línea)

     $('').html(''+Col0+' '+Col1+'€ '+Col2+'€ '+Col3+'€').appendTo('#pizzas'); 

    Entonces su DisPlay(Figure) convierte en:

     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('
  • Ajouté: '+nom+'
  • '); } Figure = null; }

    Una palabra sobre variables globales vs. variables no globales. Si ‘var’ algo dentro de una función, esa variable es local para esa función. Parece que estabas mezclando y combinando tus vars. Para más información, lee esta publicación.

    EDITAR:

    Después de tus nuevas ediciones, solo obtienes nombres de pizza numéricos porque necesitas tener citas en el lugar correcto. Intenta cambiar todo tu GetName('+Col0+'); a GetName(\''+Col0+'\');

    Para que toda la línea lea:

     $('').html(''+Col0+''+Col1+'€'+Col2+'€'+Col3+'€').appendTo('#pizzas'); 

    en realidad, el problema es que su función onclick pasando cadena sin presupuesto, poner la cita para GetName('value') y DisPlay('value') resolverá el problema.

     '+Col1+'€ 

    PROBLEMA:

    si coloca una cadena sin la cita, js la considerará variable y mediante un error de variable indefinida, mientras que los números funcionarán porque int no requiere ninguna comilla:

    p.ej; texto

    ejecutará DisPlay y tomará 15 como int. al ejecutar GetName(Letter) intentará encontrar la variable Letter que no está definida mientras GetName('Letter') se ejecutará.