developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #781: 781-jForms-javascript-check-for-multiple-selection-controls-fails.4.diff

File 781-jForms-javascript-check-for-multiple-selection-controls-fails.4.diff, 7.1 KB (added by Julien, 12 years ago)

previous patch was bugged

  • lib/jelix-www/js/jforms_light.js

     
    7070                if (!elt) continue; // sometimes, all controls are not generated...
    7171                var val = this.getValue(elt);
    7272            }
    73             var trimVal = val;
    74             if (val.replace)
    75                 var trimVal = val.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    76             if(trimVal == ''){
     73            if(val === null || val === false){
    7774                if(c.required){
    7875                    this.tForm.errorDecorator.addError(c, 1);
    7976                    valid = false;
     
    9693                case "input":
    9794                    if(elt.getAttribute('type') == 'checkbox')
    9895                        return elt.checked;
    99                     return elt.value;
     96                    var val = elt.value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
     97                    return val!==''?val:null;
    10098                case "textarea":
    101                     return elt.value;
     99                    var val = elt.value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
     100                    return val!==''?val:null;
    102101                case "select":
    103102                    if (!elt.multiple)
    104                         return elt.value;
     103                        return elt.value!==''?elt.value:null;
    105104                    var values = [];
    106105                    for (var i = 0; i < elt.options.length; i++) {
    107106                        if (elt.options[i].selected)
    108107                            values.push(elt.options[i].value);
    109108                    }
    110                     return values;
     109                    if(values.length)
     110                        return values;
     111                    return null;
    111112            }
    112113        } else if(elt.item){
    113114            // this is a NodeList of radio buttons or multiple checkboxes
     
    117118                if (item.checked)
    118119                    values.push(item.value);
    119120            }
    120             return values;
     121            if(values.length)
     122                return values;
     123            return null;
    121124        }
    122         return '';
     125        return null;
    123126    },
    124127
    125128    showHelp : function(aFormName, aControlName){
     
    387390    return true;
    388391};
    389392jFormsControlDatetime.prototype.getValue = function(){
    390     if(!this.multiFields)
    391         return document.getElementById(this.formName+'_'+this.name).value;
     393    if(!this.multiFields){
     394        var val = document.getElementById(this.formName+'_'+this.name).value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
     395        return val!==''?val:null;
     396    }
    392397
    393398    var controlId = this.formName+'_'+this.name;
    394399    var v = document.getElementById(controlId+'_year').value + '-'
     
    401406    if(secondsControl.getAttribute('type') !== 'hidden'){
    402407        v += ':'+secondsControl.value;
    403408        if(v == '-- ::')
    404             return '';
     409            return null;
    405410    }
    406411    else if(v == '-- :')
    407         return '';
     412        return null;
    408413    return v;
    409414};
    410415
     
    436441    return true;
    437442};
    438443jFormsControlDate.prototype.getValue = function(){
    439     if(!this.multiFields)
    440         return document.getElementById(this.formName+'_'+this.name).value;
     444    if(!this.multiFields){
     445        var val = document.getElementById(this.formName+'_'+this.name).value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
     446        return val!==''?val:null;
     447    }
    441448
    442449    var controlId = this.formName+'_'+this.name;
    443450    var v = document.getElementById(controlId+'_year').value + '-'
    444451        + document.getElementById(controlId+'_month').value + '-'
    445452        + document.getElementById(controlId+'_day').value;
    446453    if(v == '--')
    447         v = '';
     454        return null;
    448455    return v;
    449456};
    450457
  • lib/jelix-www/js/jforms_jquery.js

     
    6161                if (!elt) continue; // sometimes, all controls are not generated...
    6262                var val = this.getValue(elt);
    6363            }
    64             if(jQuery.trim(val) === ''){
     64            if(val === null || val === false){
    6565                if(c.required){
    6666                    this.tForm.errorDecorator.addError(c, 1);
    6767                    valid = false;
     
    8484                case "input":
    8585                    if(elt.getAttribute('type') == 'checkbox')
    8686                        return elt.checked;
    87                     return elt.value;
     87                    var val = jQuery.trim(elt.value);
     88                    return val!==''?val:null;
    8889                case "textarea":
    89                     return elt.value;
     90                    var val = jQuery.trim(elt.value);
     91                    return val!==''?val:null;
    9092                case "select":
    9193                    if (!elt.multiple)
    92                         return elt.value;
     94                        return elt.value!==''?elt.value:null;
    9395                    var values = [];
    9496                    for (var i = 0; i < elt.options.length; i++) {
    9597                        if (elt.options[i].selected)
    9698                            values.push(elt.options[i].value);
    9799                    }
    98                     return values;
     100                    if(values.length)
     101                        return values;
     102                    return null;
    99103            }
    100104        } else if(elt.item){
    101105            // this is a NodeList of radio buttons or multiple checkboxes
     
    105109                if (item.checked)
    106110                    values.push(item.value);
    107111            }
    108             return values;
     112            if(values.length)
     113                return values;
     114            return null;
    109115        }
    110         return '';
     116        return null;
    111117    },
    112118
    113119    showHelp : function(aFormName, aControlName){
     
    374380    return true;
    375381};
    376382jFormsJQControlDatetime.prototype.getValue = function(){
    377     if(!this.multiFields)
    378         return $('#'+this.formName+'_'+this.name).val();
     383    if(!this.multiFields){
     384        var val = jQuery.trim($('#'+this.formName+'_'+this.name).val());
     385        return val!==''?val:null;
     386    }
    379387
    380388    var controlId = '#'+this.formName+'_'+this.name;
    381389    var v = $(controlId+'_year').val() + '-'
     
    388396    if(secondsControl.attr('type') !== 'hidden'){
    389397        v += ':'+secondsControl.val();
    390398        if(v == '-- ::')
    391             return '';
     399            return null;
    392400    }
    393401    else if(v == '-- :')
    394         return '';
     402        return null;
    395403    return v;
    396404};
    397405
     
    423431    return true;
    424432};
    425433jFormsJQControlDate.prototype.getValue = function(){
    426     if(!this.multiFields)
    427         return $('#'+this.formName+'_'+this.name).val();
     434    if(!this.multiFields){
     435        var val = jQuery.trim($('#'+this.formName+'_'+this.name).val());
     436        return val!==''?val:null;
     437    }
    428438
    429439    var controlId = '#'+this.formName+'_'+this.name;
    430440    var v = $(controlId+'_year').val() + '-'
    431441        + $(controlId+'_month').val() + '-'
    432442        + $(controlId+'_day').val();
    433443    if(v == '--')
    434         v = '';
     444        return null;
    435445    return v;
    436446};
    437447