Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Загрузка фала по onChange на input type=file (https://javascript.ru/forum/events/43212-zagruzka-fala-po-onchange-na-input-type%3Dfile.html)

pashin76 26.11.2013 21:12

Загрузка фала по onChange на input type=file
 
Если делаю submit кликом по кнопке, как в примере http://http://javascript.ru/forum/do...mi-iframe.html файл загружается, а если пытаюсь сделать submit формы по onChange на input type=file, то не работает.
Почему?
<form action="upload.php" method="post" target="hiddenframe" enctype="multipart/form-data" name="userform">
<input type="file" id="userfile" name="userfile"  onChange="userform.submit();"/>
<input type="submit" name="upload" id="upload" value="Загрузить" />
</form>
<div id="res"></div>
<iframe id="hiddenframe" name="hiddenframe" style="width:0px; height:0px; border:0px"></iframe>

danik.js 27.11.2013 00:47

Попробуй this.form.submit() .
Кстати, HTML не чувствителен к регистру, так что можно писать onchange для консистенции, тем более что одноименное свойство пишется именно onchange, а не onChange

pashin76 27.11.2013 11:06

Цитата:

Сообщение от danik.js (Сообщение 283042)
Попробуй this.form.submit() .

Все равно не работает :(

Вот код:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
	<script type="text/javascript">	
	
		function hideBtn(){
			$('#upload').hide();
			$('#res').html("Идет загрузка файла");
		}
		
		function handleResponse(mes) {
			$('#upload').show();
		    if (mes.errors != null) {
		    	$('#res').html("Возникли ошибки во время загрузки файла: " + mes.errors);
		    }	
		    else {
		    	$('#res').html("Файл " + mes.name + " загружен");	
		    }	
		}
	</script>


<?php

if(isset($_POST['upload'])){
    //Список разрешенных файлов
    $whitelist = array(".gif", ".jpeg", ".png");
	$data = array();
	$error = true;

	//Проверяем разрешение файла
    foreach  ($whitelist as  $item) {
		if(preg_match("/$item\$/i",$_FILES['userfile']['name'])) $error = false;
    }

    //если нет ошибок, грузим файл
    if(!$error) {

		$folder =  '/home/tmp/';//директория в которую будет загружен файл

		$uploadedFile =  $folder.basename($_FILES['userfile']['name']);

		if(is_uploaded_file($_FILES['userfile']['tmp_name'])){

			if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadedFile)){

		        $data = $_FILES['userfile'];
                $data['md5_file']=md5_file($uploadedFile);
			}
			else {
				$data['errors'] = "Во время загрузки файла произошла ошибка";
			}
		}
		else {
			$data['errors'] = "Файл не загружен";
		}
    }
    else{

		$data['errors'] = 'Вы загружаете запрещенный тип файла';
    }


    //формируем js-файл
    $res = '<script type="text/javascript">';
    $res .= "var data = new Object;";
    foreach($data as $key => $value){
    	$res .= 'data.'.$key.' = "'.$value.'";';
    }
    $res .= 'window.parent.handleResponse(data);';
    $res .= "</script>";

    echo $res;

}
else{
	die("ERROR");
}

?>

Rise 27.11.2013 12:49

Цитата:

Сообщение от pashin76 (Сообщение 283078)
Все равно не работает :(

Вызови программно click по кнопке при change :cray: :
<input type="file" id="userfile" name="userfile" onchange="upload.click()" />

pashin76 28.11.2013 02:14

Цитата:

Сообщение от Rise (Сообщение 283093)
Вызови программно click по кнопке при change :cray: :
<input type="file" id="userfile" name="userfile" onchange="upload.click()" />

Так работает
Спасибо
Хотя поченму не работает по другому не понятно:-E

danik.js 28.11.2013 11:55

Привед велосипедостроителям )))

$ext = pathinfo($file, PATHINFO_EXTENSION);


Часовой пояс GMT +3, время: 18:15.