Comunidad de diseño web y desarrollo en internet online

Ayuda con un jquey mobile

Citar            
MensajeEscrito el 03 May 2012 09:03 am
Hola.
Estoy desarrollando una webapp, usando jquerymobile, y casi lo tengo, excepto un problema que no consigo resolver.

Tengo una lista de elementos, lo cuales son n listado de entradas en localStorage. Cada entrada tiene su id, el cual quiero obtener, para poder editar el elemento correspondiente, en un formulario de edición.

la cosa es que más o memos funciona. digo más o mneos, porque al hacer clic la primera vez en el listado, me devuelve id vacío, y me muestra el formulario en blanco. Si vuelvo atrás, y hago click, ya sí funcina y me recupera bien el id....

os pongo el código que genera la lista, y el código para capturar el id y mostrar el formulario de edición.

Código Javascript :

//cargamos la lista de valores
function cargarListaTrabajadas(){
   //Eliminamos el listado para construirlo de nuevo
   $('#trabajadas div[data-role="content"] ul').remove();
   $('#trabajadas div[data-role="content"]').html("<ul data-role='listview' data-theme='c'></ul>");
   //Obtenemos los ids almacenados
   var listaItemIds = getListaTrabajadasIds();
   var code = "";       
   // Get the HTML code for the list of items.            
   for(item in listaItemIds)
   {
      var jsonData = localStorage.getItem(listaItemIds[item]);
      if(jsonData)
      {
         var data = JSON.parse(jsonData);
         var html = "<li id='" + data.clave + "'><a id='" + data.clave + "' href='#vertrabajada'" + "<h3>" + data.fecha + "</h3>" +   "<span class='ui-li-count'>"+ data.tiempoEntrada + "</span>"  +  "<p>"+ data.horainicio + " - " + data.horafin + "</p>"  + "</a></li>";   
         code += html;
      }
   }
   $('#trabajadas div[data-role="content"] ul').html(code);
   
}


Código Javascript :

//Cargar el item Trabajada para visualizarlo
$( document ).delegate("#vertrabajada", "pagebeforecreate", function() {
   $('#trabajadas div[data-role="content"] ul[data-role="listview"] li a').click(function(){
      var idTrabajadaOpen = this.id;
      alert("id+ddd++: " + idTrabajadaOpen);
      var jsonData = localStorage.getItem(idTrabajadaOpen);
            
      if(jsonData)
      {
         var data = JSON.parse(jsonData);
         $('#vertrabajada div[data-role="content"] input[id="clave"]').val(data.clave);
         $('#vertrabajada div[data-role="content"] input[id="tiempoentrada"]').val(data.tiempoEntrada);
         $('#vertrabajada div[data-role="content"] input[id="fecha"]').val(data.fecha);
         $('#vertrabajada div[data-role="content"] input[id="horainicio"]').val(data.horainicio);
         $('#vertrabajada div[data-role="content"] input[id="horafin"]').val(data.horafin);
         $('#vertrabajada div[data-role="content"] input[id="festivo"]').val(data.festivo);
         $('#vertrabajada div[data-role="content"] textarea[id="comentario"]').val(data.comentario);
      }
   });   
});


¿qué me recomedáis?
gracias

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 10:13 am
Prueba a ponerlo así:

Código Javascript :

function cargarListaTrabajadas(){
   //Eliminamos el listado para construirlo de nuevo
   $('#trabajadas div[data-role="content"] ul').remove();
   $('#trabajadas div[data-role="content"]').html("<ul data-role='listview' data-theme='c'></ul>");
   //Obtenemos los ids almacenados
   var listaItemIds = getListaTrabajadasIds();

//En vez de crear una variable para almacenar los contenidos
//y después cambiarle el contenido a tu selector por esta variable
//Vacía directamente tu selector
   $('#trabajadas div[data-role="content"] ul').html('');       
   // Get the HTML code for the list of items.            
   for(item in listaItemIds)
   {
      var jsonData = localStorage.getItem(listaItemIds[item]);
      if(jsonData)
      {
         var data = JSON.parse(jsonData);
         var html = "<li id='" + data.clave + "'><a id='" + data.clave + "' href='#vertrabajada'" + "<h3>" + data.fecha + "</h3>" +   "<span class='ui-li-count'>"+ data.tiempoEntrada + "</span>"  +  "<p>"+ data.horainicio + " - " + data.horafin + "</p>"  + "</a></li>";
//Y ahora en vez de ir rellenado la variable, vas rellenando el selector
//y como lo estas haciendo dentro de la carga, no te debería pasar
//que habiendo datos en 'jsonData' se te quede vacío
         $('#trabajadas div[data-role="content"] ul').append(html);
      }
   }   
}


Un saludo

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 10:26 am
Gracias por responder....
Lo he probado y el mismo resultado.
Cuando hago clic la primera vez en el elemento de la lista, me carga el div que corresponde al formulario de edicion vacío...
Vuelvo atrás... bien por el navegaor o el propio botón de navegación del app... y ya si me captura bien los valores....

¿otra sugerencia?

Muchisimas gracias de neuvo...

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 10:30 am
La llamada a la función la haces desde un $(document).ready(function (){});, supongo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 10:34 am
También ten cuidado, que estás duplicando id's

Código Javascript :

li id='" + data.clave
a id='" + data.clave


Perdón por el Flood.

Un saludo

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 10:46 am
he revisado lo del id duplicado.. pero ni así.
Al id del li, lo llamo "li_" + data.clave y al del <a> . lo dejo en id= data.clave

tengo 3 .js en mi aplicación, y los llamo, desde index.html así:

Código HTML :

<script src="js/jquery-1.7.2.js"></script>
<script src="js/funciones.js"></script>
<script src="js/funcionesT.js"></script>
<script src="js/funcionesD.js"></script>
<script src="js/jquery.mobile-1.1.0.min.js"></script>


la llamada la hago desde el funciones.js

Código Javascript :

$(document).bind("mobileinit", function () {
   $.mobile.loadingMessage = "Cargando ...";
   $.mobile.pageLoadErrorMessage = "No se ha podido cargar la página";
});


jQuery(document).ready(function() 
{ 
   if (typeof(localStorage) == 'undefined')   // window.localStorage 
     {
        alert('Tu navegador no permite LocalStorage.\n' +
            'La persistencia de los datos no funcionará.');
     }
     else
     {   
      if(localStorage.Configuracion == null){
         alert("Tienes que configurar los datos de horarios y equivalencias.");
         localStorage.setItem('HorasExtras', '00:00' );
      }
      
      cargarHorasExtras();
      cargarListaTrabajadas();
      cargarListaDisfrutadas();
......
.....      


Y en el funcionesT.js está la función (copio el código completo):

Código Javascript :

jQuery(document).ready(function() 
//$(document).bind('mobileinit', function()
{ 
   if (typeof(localStorage) == 'undefined')   // window.localStorage 
     {
        alert('Tu navegador no permite LocalStorage.\n' +
            'La persistencia de los datos no funcionará.');
     }
     else
     {   
      if(localStorage.nTrabajadas == null){
         localStorage.setItem("nTrabajadas", 0);
      } else {
         //localStorage.setItem("count", 1);
      }
      //cargarListaTrabajadas();
      
      //Definicion de los campos de horas
      $('#fecha').scroller({ preset: 'date', theme: 'ios', cancelText: 'Cancelar', setText: 'Guardar', dateOrder:'ddmmyyyy',dateFormat:'dd/mm/yyyy', width:'65', endYear:2012 + 5, startYear:2012});
      wheels = [];
            wheels[0] = { 'Hours': {} };
            wheels[1] = { 'Minutes': {} };
            for (var i = 0; i < 60; i++) {
                if (i < 16) wheels[0]['Hours'][i] = (i < 10) ? ('0' + i) : i;
                wheels[1]['Minutes'][i] = (i < 10) ? ('0' + i) : i;
            }
         
      $('#horainicio').scroller({ preset: 'time', theme: 'ios', ampm: false, cancelText: 'Cancelar', setText: 'Guardar', timeFormat:'HH:ii', width:'65'});
      wheels = [];
            wheels[0] = { 'Hours': {} };
            wheels[1] = { 'Minutes': {} };
            for (var i = 0; i < 60; i++) {
                if (i < 16) wheels[0]['Hours'][i] = (i < 10) ? ('0' + i) : i;
                wheels[1]['Minutes'][i] = (i < 10) ? ('0' + i) : i;
            }
         
      $('#horafin').scroller({ preset: 'time', theme: 'ios', ampm: false, cancelText: 'Cancelar', setText: 'Guardar', timeFormat:'HH:ii', width:'65'});
      wheels = [];
            wheels[0] = { 'Hours': {} };
            wheels[1] = { 'Minutes': {} };
            for (var i = 0; i < 60; i++) {
                if (i < 16) wheels[0]['Hours'][i] = (i < 10) ? ('0' + i) : i;
                wheels[1]['Minutes'][i] = (i < 10) ? ('0' + i) : i;
            }   
      
     }
//var idTrabajadaOpen;
});

function insertarTrabajada(){
      var sFecha = document.getElementById('fecha').value;
      var sHoraInicio = document.getElementById('horainicio').value;
      var sHoraFin = document.getElementById('horafin').value;
      var sFestivo= document.getElementById('esfestivo').value;
      var sComentario = document.getElementById('comentario').value;
         
      var n = parseInt(localStorage.nTrabajadas,10) + 1;
      
      horasASumar = calcularTiempo(sHoraFin, sHoraInicio, sFestivo); //La hora final como primer argumento, dentro de dicha función
      var vtiempoEntrada = horasASumar.split(":"); 
      var tiempoEntrada = vtiempoEntrada[0] + ":" + ( (parseInt(vtiempoEntrada[1],10) < 10) ? ("0" + vtiempoEntrada[1]) : vtiempoEntrada[1] );
         
      var trabajada = {
         clave:      'trabajada_' + n,
         fecha:      sFecha,
         horainicio:   sHoraInicio,
         horafin:   sHoraFin,
         esfestivo:   sFestivo,
         comentario:   sComentario,
         tiempoEntrada:   tiempoEntrada
      }
      
      localStorage.setItem('trabajada_' + n, JSON.stringify(trabajada) );
      localStorage.setItem("nTrabajadas", n);
      
      actualizarHorasExtrasSuma(horasASumar);//actualizará las HorasExtras "actualizarHorasExtras(horasASumar)"
}

//Calcular Diferencia entre horas
function calculaDiferencia(v1, v2){   
      horas1=v1.split(":"); 
      horas2=v2.split(":");
      horatotale=new Array();
      for(a=0;a<2;a++)
      {
        horas1[a]=(isNaN(parseInt(horas1[a],10)))?0:parseInt(horas1[a],10)
        horas2[a]=(isNaN(parseInt(horas2[a],10)))?0:parseInt(horas2[a],10)
        
        horatotale[a]=(horas1[a]-horas2[a]);
      }
      horatotal=new Date()
      horatotal.setHours(horatotale[0]);
      horatotal.setMinutes(horatotale[1]);
      diferencia = horatotal.getHours()+":"+horatotal.getMinutes();
      return diferencia;
}

//Calcular Suma entre horas
function sumaHoras(v1, v2){
      horas1=v1.split(":"); 
      horas2=v2.split(":");
      horas = parseInt(horas1[0],10) + parseInt(horas2[0],10);
      minutos = parseInt(horas1[1],10) + parseInt(horas2[1],10);
      sumaMinutosAHora = parseInt((minutos / 60),10);
      restoMinutos = minutos % 60;
      totalHoras = horas + sumaMinutosAHora;
      retSuma = totalHoras + ":" + restoMinutos;      
      return retSuma;
}

//Funcion Comparar Horas
function CompararHoras(sHora1, sHora2) {
    var arHora1 = sHora1.split(":"); 
    var arHora2 = sHora2.split(":"); 
    var hh1 = parseInt(arHora1[0],10); 
    var mm1 = parseInt(arHora1[1],10); 
    var hh2 = parseInt(arHora2[0],10); 
    var mm2 = parseInt(arHora2[1],10); 
    if (hh1<hh2 || (hh1==hh2 && mm1<mm2)){
      retCompararHoras = '0'; 
   }else if (hh1>hh2 || (hh1==hh2 && mm1>mm2)){
       retCompararHoras = '1';
   }else{  
      retCompararHoras = '0';
   }
   return retCompararHoras;
} 

function FactoresHoras(sHoraConfig){
   retFactoresHoras = PasarHoraAMinutos(sHoraConfig) / 60;
   return retFactoresHoras;
}


//Calcular tiempo entre horas ,según la configuración, y en cada caso actualiza las Horas Extras
function calcularTiempo(v1, v2, esFestivo){ //horaFin, horaInicio, Festivo (Si/No)
   var jsonData = localStorage.getItem('Configuracion');
      if(jsonData)
      {
         var data = JSON.parse(jsonData);
         var horaNocturno = data.cfg_horanocturno;
         var valor_laboral = data.cfg_laboral;
         var valor_nocturno = data.cfg_nocturno;
         var valor_festivo = data.cfg_festivo;   
      }
      
   var factorLaboral = FactoresHoras(valor_laboral);
   var factorNocturno = FactoresHoras(valor_nocturno);
   var factorFestivo = FactoresHoras(valor_festivo);   
      
   var comp1 = CompararHoras(v2,horaNocturno);
   var comp2 = CompararHoras(v1,"24:00");
   var comp3 = CompararHoras(v1,horaNocturno);
   var comp4 = CompararHoras(v2,"24:00");
   var comp5 = CompararHoras("6:00", v1);
   var comp6 = CompararHoras("6:00", v2);
   var compF = esFestivo;
   
   //v2
   if(comp1 == "0" && comp6 == "0"){ //v2<=Hn
      if(comp3 == "0" && comp5 == "0") { //v1<=Hn
         //desde v2 hasta v1, pero menor que Hn
         var tramo1 = calculaDiferencia(v1,v2);
         var tiempoTramo1 = PasarHoraAMinutos(tramo1) * factorLaboral ;
         var tiempoTramo11 = PasarMinutosAHora(tiempoTramo1);
         retornoTramos = tiempoTramo11;
         return retornoTramos;
               
      } else { //v1>Hn
         if(comp5 == "0"){ //08:00<=v1 - para saber si es dentro de las 24:00
            //desde v2 hasta Hn
            var tramo1 = calculaDiferencia(horaNocturno,v2);
            var tiempoTramo1 = PasarHoraAMinutos(tramo1) * factorLaboral ;
            var tiempoTramo11 = PasarMinutosAHora(tiempoTramo1);
            retornoTramo1 = tiempoTramo11;
            //desde Hn hasta v1
            var tramo2 = calculaDiferencia(v1,horaNocturno);
            var tiempoTramo2 = PasarHoraAMinutos(tramo2) * factorNocturno ;
            var tiempoTramo22 = PasarMinutosAHora(tiempoTramo2);
            retornoTramo2 = tiempoTramo22;
            //suma
            var retornoTramos = sumaHoras(retornoTramo1, retornoTramo2);
            return retornoTramos;
            
         } else { //v1 > 24:00            
               if(compF == "Si"){ //es F
                  //desde v2 hasta Hn
                  var tramo1 = calculaDiferencia(horaNocturno,v2);
                  var tiempoTramo1 = PasarHoraAMinutos(tramo1) * factorLaboral ;
                  var tiempoTramo11 = PasarMinutosAHora(tiempoTramo1);
                  retornoTramo1 = tiempoTramo11;
                  //desde Hn hasta 24:00
                  var tramo2 = calculaDiferencia('24:00',horaNocturno);
                  var tiempoTramo2 = PasarHoraAMinutos(tramo2) * factorNocturno ;
                  var tiempoTramo22 = PasarMinutosAHora(tiempoTramo2);
                  retornoTramo2 = tiempoTramo22;
                  //desde 00:00 hasta v1 y Festivo
                  var tramo3 = calculaDiferencia(v1,'00:00');
                  var tiempoTramo3 = PasarHoraAMinutos(tramo3) * factorFestivo ;
                  var tiempoTramo33 = PasarMinutosAHora(tiempoTramo3);
                  retornoTramo3 = tiempoTramo33;
                  //suma
                  var retornoTramoA = sumaHoras(retornoTramo1, retornoTramo2);
                  var retornoTramoB = sumaHoras(retornoTramoA, retornoTramo3);
                  return retornoTramoB;
                  
               } else { //no es F
                  //desde v2 hasta Hn
                  var tramo1 = calculaDiferencia(horaNocturno,v2);
                  var tiempoTramo1 = PasarHoraAMinutos(tramo1) * factorLaboral ;
                  var tiempoTramo11 = PasarMinutosAHora(tiempoTramo1);
                  retornoTramo1 = tiempoTramo11;
                  //desde Hn hasta 24:00
                  var tramo2 = calculaDiferencia('24:00',horaNocturno);
                  var tiempoTramo2 = PasarHoraAMinutos(tramo2) * factorNocturno ;
                  var tiempoTramo22 = PasarMinutosAHora(tiempoTramo2);
                  retornoTramo2 = tiempoTramo22;
                  //desde 00:00 hasta v1 y No Festivo
                  var tramo3 = calculaDiferencia(v1,'00:00');
                  var tiempoTramo3 = PasarHoraAMinutos(tramo3) * factorNocturno ;
                  var tiempoTramo33 = PasarMinutosAHora(tiempoTramo3);
                  retornoTramo3 = tiempoTramo33;
                  //suma
                  var retornoTramoA = sumaHoras(retornoTramo1, retornoTramo2);
                  var retornoTramoB = sumaHoras(retornoTramoA, retornoTramo3);
                  return retornoTramoB;
               }
         }
      }
   } else { //v2>Hn
      if(comp4 == "0" && comp6 == "0"){ //v2<=24:00
         if(comp2 == "0" && comp5 == "0"){ //v1<=24:00 - comparo con las 8:00 para saber si esta dentro de las 24:00
            var tramo1 = calculaDiferencia(v1,v2);
            var tiempoTramo1 = PasarHoraAMinutos(tramo1) * factorNocturno ;
            var tiempoTramo11 = PasarMinutosAHora(tiempoTramo1);
            retornoTramo = tiempoTramo11;
            return retornoTramo;
            
         } else { //v1>24:00
            if(compF == "Si"){ //es F
               //desde v2 hasta 24:00
               var tramo2 = calculaDiferencia('24:00',v2);
               var tiempoTramo2 = PasarHoraAMinutos(tramo2) * factorNocturno ;
               var tiempoTramo22 = PasarMinutosAHora(tiempoTramo2);
               retornoTramo2 = tiempoTramo22;
               //desde 00:00 hasta v1 y Festivo
               var tramo3 = calculaDiferencia(v1,'00:00');
               var tiempoTramo3 = PasarHoraAMinutos(tramo3) * factorFestivo ;
               var tiempoTramo33 = PasarMinutosAHora(tiempoTramo3);
               retornoTramo3 = tiempoTramo33;
               //suma
               var retornoTramo = sumaHoras(retornoTramo2, retornoTramo3);
               return retornoTramo;

            } else {// no es F
               //desde v2 hasta 24:00
               var tramo2 = calculaDiferencia('24:00',v2);
               var tiempoTramo2 = PasarHoraAMinutos(tramo2) * factorNocturno ;
               var tiempoTramo22 = PasarMinutosAHora(tiempoTramo2);
               retornoTramo2 = tiempoTramo22;
               //desde 00:00 hasta v1 y No Festivo
               var tramo3 = calculaDiferencia(v1,'00:00');
               var tiempoTramo3 = PasarHoraAMinutos(tramo3) * factorNocturno ;
               var tiempoTramo33 = PasarMinutosAHora(tiempoTramo3);
               retornoTramo3 = tiempoTramo33;
               //suma
               var retornoTramo = sumaHoras(retornoTramo2, retornoTramo3);
               return retornoTramo;

            }
         }
      } else { //v2 > 24:00
         if(compF == "Si"){//es F
            var tramo3 = calculaDiferencia(v1,v2);
            var tiempoTramo3 = PasarHoraAMinutos(tramo3) * factorFestivo ;
            var tiempoTramo33 = PasarMinutosAHora(tiempoTramo3);
            retornoTramo3 = tiempoTramo33;
            return retornoTramo3;
   
         } else { //no es F
            var tramo3 = calculaDiferencia(v1,v2);
            var tiempoTramo3 = PasarHoraAMinutos(tramo3) * factorNocturno ;
            var tiempoTramo33 = PasarMinutosAHora(tiempoTramo3);
            retornoTramo3 = tiempoTramo33;
            return retornoTramo3;
         }
      }
   }   
}

//Actualiza el valor de las HorasExtras en el Storage  
function actualizarHorasExtrasSuma(horasASumar){
      //obtenemos el acumulado actual de las horas extras
      var horasExtrasActuales = localStorage.getItem('HorasExtras');
      var nuevaHorasExtras = sumaHoras(horasExtrasActuales, horasASumar);   
      var vminutos = nuevaHorasExtras.split(":"); 
      var retNuevaHora = vminutos[0] + ":" + ( (parseInt(vminutos[1]) < 10) ? ("0" + vminutos[1]) : vminutos[1] );
      localStorage.setItem('HorasExtras', retNuevaHora );         
}

//Obtenemos los ids de la lista almacenada
function getListaTrabajadasIds()
{
   var length = localStorage.length;
   var result = new Array();
   for (i=0; i<length; i++) 
   {
      var key = localStorage.key(i);
      if(key.indexOf('trabajada_') === 0) // Comienza con
         result.push(key);
   }
   return result.reverse();
}

//cargamos la lista de valores
function cargarListaTrabajadas(){
   //Eliminamos el listado para construirlo de nuevo
   $('#trabajadas div[data-role="content"] ul').remove();
   $('#trabajadas div[data-role="content"]').html("<ul data-role='listview' data-theme='c'></ul>");
   //Obtenemos los ids almacenados
   var listaItemIds = getListaTrabajadasIds();

//En vez de crear una variable para almacenar los contenidos
//y después cambiarle el contenido a tu selector por esta variable
//Vacía directamente tu selector
   $('#trabajadas div[data-role="content"] ul').html('');       
   // Get the HTML code for the list of items.            
   for(item in listaItemIds)
   {
      var jsonData = localStorage.getItem(listaItemIds[item]);
      if(jsonData)
      {
         var data = JSON.parse(jsonData);
         var html = "<li id='li_" + data.clave + "'><a id='" + data.clave + "' href='#vertrabajada'" + "<h3>" + data.fecha + "</h3>" +   "<span class='ui-li-count'>"+ data.tiempoEntrada + "</span>"  +  "<p>"+ data.horainicio + " - " + data.horafin + "</p>"  + "</a></li>";
//Y ahora en vez de ir rellenado la variable, vas rellenando el selector
//y como lo estas haciendo dentro de la carga, no te debería pasar
//que habiendo datos en 'jsonData' se te quede vacío
         $('#trabajadas div[data-role="content"] ul').append(html);
      }
   }   
}
/*function cargarListaTrabajadas(){
   //Eliminamos el listado para construirlo de nuevo
   $('#trabajadas div[data-role="content"] ul').remove();
   $('#trabajadas div[data-role="content"]').html("<ul data-role='listview' data-theme='c'></ul>");
   //Obtenemos los ids almacenados
   var listaItemIds = getListaTrabajadasIds();
   var code = "";       
   // Get the HTML code for the list of items.            
   for(item in listaItemIds)
   {
      var jsonData = localStorage.getItem(listaItemIds[item]);
      if(jsonData)
      {
         var data = JSON.parse(jsonData);
         //var html = "<li id='" + data.clave + "'><a id='" + data.clave + "' href='#vertrabajada' onclick=enviaridActual(" + data.clave + ");>" + "<h3>" + data.fecha + "</h3>" +   "<span class='ui-li-count'>"+ data.tiempoEntrada + "</span>"  +  "<p>"+ data.horainicio + " - " + data.horafin + "</p>"  + "</a></li>";   
         var html = "<li id='" + data.clave + "'><a id='" + data.clave + "' href='#vertrabajada'" + "<h3>" + data.fecha + "</h3>" +   "<span class='ui-li-count'>"+ data.tiempoEntrada + "</span>"  +  "<p>"+ data.horainicio + " - " + data.horafin + "</p>"  + "</a></li>";   
         code += html;
      }
   }
   $('#trabajadas div[data-role="content"] ul').html(code);
   
}*/

//Cargar el item Trabajada para visualizarlo
$( document ).delegate("#vertrabajada", "pagebeforecreate", function() {
   //$('#trabajadas div[data-role="content"] ul[data-role="listview"].children').click(function(){
   $('#trabajadas div[data-role="content"] ul[data-role="listview"] li a').click(function(){
      var idTrabajadaOpen = this.id;
      //var idTrabajadaOpen = $('#trabajadas div[data-role="content"] ul[data-role="listview"] li a').attr('id');
      alert("i--d: " + idTrabajadaOpen);
      //var idTrabajadaOpen = recuperaridActual();

      var jsonData = localStorage.getItem(idTrabajadaOpen);
            
      if(jsonData)
      {
         var data = JSON.parse(jsonData);
         $('#vertrabajada div[data-role="content"] input[id="clave"]').val(data.clave);
         $('#vertrabajada div[data-role="content"] input[id="tiempoentrada"]').val(data.tiempoEntrada);
         $('#vertrabajada div[data-role="content"] input[id="fecha"]').val(data.fecha);
         $('#vertrabajada div[data-role="content"] input[id="horainicio"]').val(data.horainicio);
         $('#vertrabajada div[data-role="content"] input[id="horafin"]').val(data.horafin);
         $('#vertrabajada div[data-role="content"] input[id="festivo"]').val(data.festivo);
         $('#vertrabajada div[data-role="content"] textarea[id="comentario"]').val(data.comentario);
      }
   });   
});

//Cargar el id Trabajada para eliminar
$( document ).delegate("#dialogoEliminar", "pagebeforecreate", function() {
      //var idTrabajadaOpen = this.id;
         //var idAbrir = recuperaridActual();
         //$('#dialogoEliminar div[data-role="content"] input[id="clave"]').val(idAbrir);
});




Gracias de nuevo

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 11:01 am
Vale es mucho código que revisar, en la funcion cargarListaTrabajadas(), haz este log, y dime que te muestra cuando no te carga y cuando te carga.

Código Javascript :

var listaItemIds = getListaTrabajadasIds();
console.log(listaItemIds);


Un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 11:30 am
Perdona mi ignorancia.. pero... ¿donde miro la consola?
En Chrome ...

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 11:33 am
botón derecho en la página --> inspeccionar elemento --> La pestaña de consola

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 11:33 am
["trabajada_1", "trabajada_2"]
es lo que devuelve...

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 11:37 am
esos valores son las claves de los elemento que inserto en localStorage.
A mi me da que al recuperar desde localStorage, la primera vez no mete los id correctamente, como si no le hubiera dado tiempo a capturarlos... y la segunda..y sucesivas, ya si los tiene...

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 11:43 am
Pero eso te lo devuelve las 2 veces, ¿cuando carga y cuando no, o sólo cuando carga?

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 11:46 am
Siempre....
me explico... la página si me carga bien el listado... lo que no hace bien es cuando pulso en un elemento de la lista que genero, el formulario donde deben aparecer los datos, ya que quiero rellenar los campos de ese formulario, con los datos de esa entrada del listado, almacenado en localStorage, según la clave que le paso.
Es el paso de esa clave la que no funciona la primera vez que hago clic.. mientras que las siguentes sí pasa bien la clave, y rellena bien los campos.

Muchismas gracias de nuevo....

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 11:50 am
¿Qué te da esta alerta la primera vez que cliqueas?, es decir cuando no te carga

Código Javascript :

alert("id+ddd++: " + idTrabajadaOpen);

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 11:52 am
La primera vez ni entra por ahí... por tanto no muestra nada.. y el formulario destino aparece vacío.

La segunda y siguientes... el código del id.. es decir.. "trabajada_1" o "trabajada_2", y el formualrio bien relleno

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 11:54 am
¿Quieres decir que la primera vez, no reacciona ni el click?, ¿no te salta la alerta?

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 11:58 am
cuando cargo todo... y me muestra el listado, hago clic en uno de los elementos de la lista.
Esa acción tiene que capturar el id del enlace ("trabajada_1", por ejemplo), y mostrar un formulario de edición, donde en los campos cargo lo almacenado para esa clave en localStorage.

la primera vez que hago clic, me cambia al formulario, pero con los campos vacíos, y según tengo el código, no entra donde muestro el alert.

Si vuelvo atrás... y hago clic de nuevo.. si me carga los datos en el formulario, ya que recuperó bien el id.
Además, en ese caso me muestra el alert...

Código Javascript :

$( document ).delegate("#vertrabajada", "pagebeforecreate", function() {
   //$('#trabajadas div[data-role="content"] ul[data-role="listview"].children').click(function(){
   $('#trabajadas div[data-role="content"] ul[data-role="listview"] li a').click(function(){
      var idTrabajadaOpen = this.id;
      //var idTrabajadaOpen = $('#trabajadas div[data-role="content"] ul[data-role="listview"] li a').attr('id');
      alert("i>XXXd: " + idTrabajadaOpen);


Aquí está eñ código donde entra o no si recupera el id...

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 12:10 pm
Entonces el problema es que no te está vinculando el CLIK la primera vez, por que si estuviea vinculado la alerta te tendría que saltar si o si. Puede ser que esté intentando obtener los objetos antes de que el DOM esté listo. Prueba a cambiar el click, por un live, que te coge elementos insertados en el momento o en el futuro.

Código Javascript :

$( document ).delegate("#vertrabajada", "pagebeforecreate", function() {
   $('#trabajadas div[data-role="content"] ul[data-role="listview"] li a')
   .live('click', function(){
      //La función
   });   
});


Si no, prueba también a meterlo todo dentro de un document.ready si no lo está ya

Código Javascript :

$(document).ready(function () {
   $( document ).delegate("#vertrabajada", "pagebeforecreate", function() {
      //Acciones  
   });
});


Espero que demos con ello.

Un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 12:51 pm
Gracias de nuevo...
pues ninguna de las dos cosas .. :-(

¿Se te ocurre otra forma de enfocarlo?Quizas sea un error en mi enfoque.
En definitiva lo que necesito es con un formulario insertar datos según una clave en localStorage, visualizarlos en una lista, y pulsando en esa lista, visualizar el elemento en cuestión...

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 01:07 pm
Si quieres dame un link donde pueda ver la estructura completa y te ayudo a revisarlo.

un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 May 2012 01:08 pm
lo tengo en un servidor en local... ¿cómo podríamos hacerlo?

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 01:15 pm
te he podido monar en un server de ejemplo..
http://77.241.112.26:8000/pruebas/index.html

El listado aparece en trabajadas

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2012 01:15 pm
haz un zip con los archivos necesarios para el caso, y me pasas la url por mensaje privado o la publicas aquí. un we transfer o lo que sea.

o me la mandas a abductedman'arroba'hotmailcom

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 04 May 2012 08:45 am
Saludos, no entiendo una cosa, a mi si me funciona,

Es decir, te explico los pasos que he seguido y si el error está en otro sitio me dices.

1- Primero le he dado a configurar 1 hora de jornada laboral, lo he configurado en 10:38. He cerrado la ventana del navegador, la he vuelto a abrir, y seguía configurado

2- En trabajadas he creado una nueva hora 02/05/2012 10:39-10:55 y los datos me los carga cerrando la ventana del navegador y volviendo a cargarla. desde el principio.

Tengo que hacer algo para que no me carguen las cosas ¿o aparentemente funciona bien?

Un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 04 May 2012 08:49 am
Gracias por seguir atendiéndome....
Ese no es el problema. Me explico:
- Crea otra entrada más de horas trabajadas
- En el listado te deben aparecer 2 entradas.
- Supongamos que queremos consultar una de ellas. Entonces hacemos clic en cualquiera.
- En este caso, necesito saber sobre cual de ellas pulso,para mostrarme dicha información en el formulario que se debe abrir.
- la primera vez que hago clic, en cualquiera de ellas, me abre el formualrio en blanco
- si das atras... ya las siguientes veces sí lo carga bien los datos según el elemento de la lista que pulses..

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 May 2012 09:25 am
Ya lo veo,

Ahora mismo no lo puedo mirar que me acaban de llamar del taller y me tengo que ir a por el coche pitando, en cuanto vuelva le echo un vistazo, no parece ser complicado.

Un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 04 May 2012 09:27 am
Muchismas gracias...estare atento a las notificaciones....

Millones de gracias de nuevo

p.d.: Espero que vengas "animado" del taller.. jeje

Por AguaRas

93 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 May 2012 10:11 am
Al final se ha retrasado mi salida al taller y he detectado el error, como te decía en el momento de la carga, cuando hacías el primer click, este no estaba bien vinculado, la solución:

Código Javascript :

//En el archivo "funcionesT" baja hasta la función "cargarListaTrabajadas()" y después del bucle añade esta llamada a función:
for (item in listaItemsId) {
...........
}
cargarDatosTrabajados();

//Despúes la siguiente función delegate:
$( document ).delegate("#vertrabajada", "pagebeforecreate", function() {

//Símplemente cámbiala por la función que acabamos de hacer
function cargarDatosTrabajados () {
No se si este cambio te interferirá en algo, por lo que yo he visto no, pero tu conoces mejor la app que yo.
Si te interfiere, podrías hacer dos cosas:
  • Dejar ambas funciones, es decir el delegate y la que acabamos de crear y en ambas antes de llamas a live, llamas a un die para matar los eventos antes de asociarlos y que así no se te dupliquen
  • O, ahora que sabes donde está exactamente el error, lo intentas depurar mejor (esta es la mejor de las 2 opciones).


Aquí puedes ver la muestra funcionando, en cuanto lo veas, me lo dices y lo borro de mi server.:
Prueba funcional

Espero te sirva, un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 04 May 2012 10:22 am
:wink: :wink: :wink: :wink:
Por fín....
MILLONES DE GRACIAS.....

No sé cómo podría agradecértelo.....
Llevaba noches de fines de semana que es cuando puedo practicar con ésto, sin encontrar la solución...

GRACIAS ....
Así da gusto entrar en este foro....

Por AguaRas

93 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.