невозможно использовать более одной функции javascript для одного идентификатора

#javascript

#javascript

Вопрос:

Я использую 2 функции входного файла foto для допустимого расширения и заменяю метку именем foto

html-код:

 <input class="foto" type='file' name='propic' id="aa" class="required" value="<?php echo "$FOTO"; ?>" onchange="pressed()"><label style="font-weight:normal; width:80px; overflow:hidden; text-overflow:ellipsis;" id="fileLabel"><?php echo "$FOTO"; ?></label>
 

код javascript:

      <script type="text/javascript">
    var a = document.getElementById('aa');
    window.pressed = function(){

if(a.value ==  "")
    {
        fileLabel.innerHTML = "Choose file";
    }
    else
    {
        var theSplit = a.value.split('\');
        fileLabel.innerHTML = theSplit[theSplit.length-1];
    }
};

a.onchange = function(e){ 
    var ext = this.value.match(/.([^.] )$/)[1];
    switch(ext)
    {
        case 'jpg':
        case 'jpeg':
        case 'png':
            break;
        default:
            alert('File is not valid!');
            this.value='';
    }
};
</script>
 

Работает только одна функция, то есть функция для допустимого расширения файла.. Как заставить работать другую функцию??

Комментарии:

1. window.нажата? когда / как вы ожидаете вызвать это событие? И где fileLabel определена переменная? Есть ли у вас какая-либо ошибка в консоли js?

2. <input [...] onchange="pressed()">

3. @J.Beyer Я ввел его..

4. окно @FabrizioCalderan.нажимается при нажатии входного файла для открытия окна браузера .. метка файла определена в теге label, и у меня нет никаких ошибок в консоли js

5. sry, это был @FabrizioCalderan .. и вам также нужно определить filelabel в js-коде. Причина, по которой вы не получаете сообщение об ошибке, заключается в том, что window.pressed не вызывается, потому что вы перезаписываете.onchange . Взгляните на addEventListener() .

Ответ №1:

Пожалуйста, попробуйте:

 <script type="text/javascript">
    var a = document.getElementById('aa');
    var fileLabel = document.getElementById('fileLabel');
    updateLabel = function(){
        if(a.value ==  "")
        {
            fileLabel.innerHTML = "Choose file";
        }
        else
        {
            var theSplit = a.value.split('\');
            fileLabel.innerHTML = theSplit[theSplit.length-1];
        }
    };

    validateExtension = function(e){ 
        var ext = this.value.match(/.([^.] )$/)[1];
        switch(ext)
        {
            case 'jpg':
            case 'jpeg':
            case 'png':
                break;
            default:
                alert('File is not valid!');
                this.value='';
        }
    };
    a.addEventListener('change',validateExtension,false);
    a.addEventListener('change',updateLabel,false);
</script>
 

и удалите onchange из html-кода.

Комментарии:

1. Большое вам спасибо, сейчас обе работают .. я дам вам медаль: D

2. Нет проблем 🙂 Но обратите внимание, что некоторые IE-версии не знают addEventListener — я бы рекомендовал использовать jQuery bind() .