Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Javascript - Live-edit tabella, problema con l input SELECT
Forum - Javascript - Live-edit tabella, problema con l input SELECT

Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 74
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 16:43
Mercoledì, 10/05/2017
Ciao a tutti ( si sono sempre io, purtroppo 8-| ) mi trovo davanti ad un nuovo problema; consiste in cio':
Ho un checkbox che se abilitato, al click su uno span (dove vi si trova il testo di ogni td della tabella) si trasforma nell'input impostato attraverso l attributo data-editable='true', e al contrario (perdendo il focus sull input) torna allo span e quindi non piu editabile. Ecco il mio problema e' che coi select non torna allo span precedente, assegnandogli il valore dello stesso e francamente non capisco il motivo... sapreste aiutarmi?

P.S. il tagname del select mi torna undefined e non mi spiego sta cosa, penso sia legato tutto a cio'..

Il codice e' il seguente:
Codice sorgente - presumibilmente Delphi

  1. $('#edit_mode').change(function() {
  2.       var edit_mode = $(this);
  3.       if( edit_mode.prop('checked') ){
  4.           $("*[data-editable='true']").each(function(){
  5.             var type_input = $(this).data('type');
  6.             var label = $(this);
  7.             var text = label.html();
  8.             var size = ( text.length + 2 ) * 8;
  9.             var name_str = label.attr('name').slice( label.attr('name').indexOf("_") );
  10.             if( type_input.search("datetime") > -1 ){
  11.                 text = text.replace(" ", "T");
  12.                 label.after("<input type='"+type_input+"' name='input"+name_str+"' class='form-control input-sm' style='display:none;width:200px' value='"+text+"' />");
  13.             }
  14.             else if(type_input === 'number'){
  15.                 var min = $(this).data('min');
  16.                 var max = $(this).data('max');
  17.                 var element = "<input type='"+type_input+"' name='input"+name_str+"' class='form-control input-sm' style='display:none;width:"+(size + 25)+"px' value='"+text+"' ";
  18.                 if(typeof min !== 'undefined')          element += " min='"+min+"'";
  19.                 if(typeof max !== 'undefined')          element += " max='"+max+"'";
  20.                 label.after(element + " />");
  21.             }
  22.             else if(type_input === 'textarea' ){
  23.                 text = text.replace(/<br *\/?>/gi, '');
  24.                 label.after("<textarea name='input"+name_str+"' style='display:none;'>"+text+"</textarea>");
  25.             }
  26.             else if(type_input === 'select'){
  27.                 var source = $(this).data('source');
  28.                 var parent = $(this);
  29.                 $.getJSON('url/ecc/pagina.php',
  30.                           {action : source}, function(data){
  31.                         var element = "<select id='input"+name_str+"' name='input"+name_str+"' class='form-control input-sm' style='display:none;'>";
  32.                         $.each(data, function (i, item) {
  33.                       var option = "<option value='"+item.id+"'";
  34.                       if(item.value == text)
  35.                         option += "selected='selected'";
  36.                       option += ">"+item.value+"</option>";
  37.                       element += option;
  38.                     });
  39.                         element += "</select>";
  40.                         label.after(element);
  41.                 });
  42.             }
  43.             else{
  44.                 label.after("<input type='text' name='input"+name_str+"' class='form-control input-sm' style='display:none;width:"+size+"px' value='"+text+"' />");
  45.             }
  46.                 var textbox = $(this).next();
  47.               alert( textbox.prop("tagName") );
  48.  
  49.             label.click(function () {
  50.               if( edit_mode.prop('checked') ){
  51.                 $(this).hide();                
  52.                 $(this).next().show().focus();
  53.               }
  54.             });
  55.  
  56.             textbox.focusout(function () {
  57.               var tb = $(this);
  58.               var text = tb.val();
  59.               $(this).hide();
  60.               if( $(this).prop("tagName") == 'INPUT' && $(this).attr('type').search("datetime") > -1 ){
  61.                   var inputData = new Date(text);
  62.                   if ( Object.prototype.toString.call(inputData) === "[object Date]" ) {
  63.                     if ( !isNaN( inputData.getTime() ) ) {  // inputData.valueOf() could also work
  64.                         text = text.replace(/[A-Za-z]/, " ");
  65.                     }
  66.                     else {
  67.                         alert('non valida');
  68.                     }
  69.                   }
  70.                   else {
  71.                      alert('non valida');
  72.                   }
  73.               }
  74.               else if( $(this).prop("tagName") == 'TEXTAREA' ){
  75.                   text = text.replace(/\r\n|\r|\n/g, "<br />");
  76.               }
  77.               $(this).prev().html(text);
  78.               $(this).prev().show();
  79.             });
  80.           });
  81.       }



Ultima modifica effettuata da domenico_rizzo il 10/05/2017 alle 16:47


Domenico Rizzo
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1123
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:07
Mercoledì, 10/05/2017
Personalmente ritengo che quando il problema sia legato a Javascript il debug sia molto più rapido su una demo o disponendo, per l'appunto del codice sorgente completo della pagina da poter testare in modo rapido.


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 74
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 18:19
Mercoledì, 10/05/2017
Testo quotato

Postato originariamente da Roby94:

Personalmente ritengo che quando il problema sia legato a Javascript il debug sia molto più rapido su una demo o disponendo, per l'appunto del codice sorgente completo della pagina da poter testare in modo rapido.


Effettivamente non hai tutti i torti quindi entro stasera preparo e posto di seguito una demo :k:

@Roby94
Ho risolto modificando nellla parte server un errore sul risultato di ritorno  :_doubt:

Ultima modifica effettuata da domenico_rizzo il 10/05/2017 alle 19:06


Domenico Rizzo
PM Quote