Oppure

Loading
10/05/17 14:43
domenico_rizzo
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:
$('#edit_mode').change(function() {
      var edit_mode = $(this);
      if( edit_mode.prop('checked') ){
          $("*[data-editable='true']").each(function(){
            var type_input = $(this).data('type');
            var label = $(this);
            var text = label.html();
            var size = ( text.length + 2 ) * 8;
            var name_str = label.attr('name').slice( label.attr('name').indexOf("_") );
            if( type_input.search("datetime") > -1 ){
              	text = text.replace(" ", "T");
            	label.after("<input type='"+type_input+"' name='input"+name_str+"' class='form-control input-sm' style='display:none;width:200px' value='"+text+"' />");
            }
            else if(type_input === 'number'){
                var min = $(this).data('min');
                var max = $(this).data('max');
              	var element = "<input type='"+type_input+"' name='input"+name_str+"' class='form-control input-sm' style='display:none;width:"+(size + 25)+"px' value='"+text+"' ";
              	if(typeof min !== 'undefined')  	element += " min='"+min+"'";
              	if(typeof max !== 'undefined')  	element += " max='"+max+"'";
              	label.after(element + " />");
            }
            else if(type_input === 'textarea' ){
              	text = text.replace(/<br *\/?>/gi, '');
            	label.after("<textarea name='input"+name_str+"' style='display:none;'>"+text+"</textarea>");
            }
            else if(type_input === 'select'){
              	var source = $(this).data('source');
              	var parent = $(this);
              	$.getJSON('url/ecc/pagina.php', 
                          {action : source}, function(data){
                  	var element = "<select id='input"+name_str+"' name='input"+name_str+"' class='form-control input-sm' style='display:none;'>";
                  	$.each(data, function (i, item) {
                      var option = "<option value='"+item.id+"'";
                      if(item.value == text)
                        option += "selected='selected'";
                      option += ">"+item.value+"</option>";
                      element += option;
                    });
                  	element += "</select>";
                  	label.after(element);
                });
            }
            else{
            	label.after("<input type='text' name='input"+name_str+"' class='form-control input-sm' style='display:none;width:"+size+"px' value='"+text+"' />");
            }
           	var textbox = $(this).next();
              alert( textbox.prop("tagName") );

            label.click(function () {
              if( edit_mode.prop('checked') ){
                $(this).hide();                
                $(this).next().show().focus();
              }
            });

            textbox.focusout(function () {
              var tb = $(this);
              var text = tb.val();
              $(this).hide();
              if( $(this).prop("tagName") == 'INPUT' && $(this).attr('type').search("datetime") > -1 ){
                  var inputData = new Date(text);
                  if ( Object.prototype.toString.call(inputData) === "[object Date]" ) {
                    if ( !isNaN( inputData.getTime() ) ) {  // inputData.valueOf() could also work
                        text = text.replace(/[A-Za-z]/, " ");
                    }
                    else {
                      	alert('non valida');
                    }
                  }
                  else {
                     alert('non valida');
                  }
              }
              else if( $(this).prop("tagName") == 'TEXTAREA' ){
              	  text = text.replace(/\r\n|\r|\n/g, "<br />");
              }
              $(this).prev().html(text);
              $(this).prev().show();
            });
          });
      }

Ultima modifica effettuata da domenico_rizzo 10/05/17 14:47
aaa
10/05/17 15:07
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.
aaa
10/05/17 16:19
domenico_rizzo
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 10/05/17 17:06
aaa