Как создать функцию, которая загружает файл и запускает пользовательское событие. Затем присоедините слушателя к входу. Таким образом, у нас больше гибкости в использовании файла, а не только для предварительного просмотра изображений.
/**
* @param {domElement} input - The input element
* @param {string} typeData - The type of data to be return in the event object.
*/
function loadFileFromInput(input,typeData) {
var reader,
fileLoadedEvent,
files = input.files;
if (files && files[0]) {
reader = new FileReader();
reader.onload = function (e) {
fileLoadedEvent = new CustomEvent('fileLoaded',{
detail:{
data:reader.result,
file:files[0]
},
bubbles:true,
cancelable:true
});
input.dispatchEvent(fileLoadedEvent);
}
switch(typeData) {
case 'arraybuffer':
reader.readAsArrayBuffer(files[0]);
break;
case 'dataurl':
reader.readAsDataURL(files[0]);
break;
case 'binarystring':
reader.readAsBinaryString(files[0]);
break;
case 'text':
reader.readAsText(files[0]);
break;
}
}
}
function fileHandler (e) {
var data = e.detail.data,
fileInfo = e.detail.file;
img.src = data;
}
var input = document.getElementById('inputId'),
img = document.getElementById('imgId');
input.onchange = function (e) {
loadFileFromInput(e.target,'dataurl');
};
input.addEventListener('fileLoaded',fileHandler)
Наверное, мой код не так хорош, как некоторые пользователи, но я думаю, вы его получите. Здесь вы можете увидеть пример
Сам JavaScript не имеет ничего встроенного для обработки параметров строки запроса.
Код, работающий в (современном) браузере, вы можете использовать URL
объект (который является частью API, предоставляемых браузерами для JS):
var url_string = "http: / /www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5 "; //window.location.href var url = новый URL (url_string); var c = url.searchParams.get ("c"); console.log (c);
Для старых браузеров (включая Internet Explorer) вы можете использовать этот полифилл или код из исходной версии этого ответа, предшествующий URL
:
Вы можете получить доступ к location.search
, что даст вам от символа ?
до конца URL-адреса или начала идентификатора фрагмента (#foo), в зависимости от того, что наступит раньше.
Затем вы можете проанализировать это следующим образом:
function parse_query_string (query) {var vars = query.split ("&"); var query_string = {}; для (var i = 0; i
Вы можете получить строку запроса из URL-адреса текущей страницы с помощью:
var query = window.location.search.substring(1);
var qs = parse_query_string(query);
function gup( name, url ) {
if (!url) url = location.href;
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( url );
return results == null ? null : results[1];
}
gup('q', 'hxxp://example.com/?q=abc')
Вы можете получить строку запроса в location.search
, тогда вы можете разделить все после вопросительного знака:
var params = {};
if (location.search) {
var parts = location.search.substring(1).split('&');
for (var i = 0; i < parts.length; i++) {
var nv = parts[i].split('=');
if (!nv[0]) continue;
params[nv[0]] = nv[1] || true;
}
}
// Now you can get the parameters you want like so:
var abc = params.abc;
В большинстве реализаций, которые я видел, отсутствует URL-декодирование имен и значений.
Вот общая служебная функция, которая также выполняет правильное URL-декодирование:
function getQueryParams(qs) {
qs = qs.split('+').join(' ');
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
}
//var query = getQueryParams(document.location.search);
//alert(query.foo);
Изящное, функциональное решение
для стиля Позволяет нам создать объект, содержащий имена параметрического усилителя URL как ключи, затем мы можем легко извлечь параметр его именем:
// URL: https://example.com/?test=true&orderId=9381
// Build an object containing key-value pairs
export const queryStringParams = window.location.search
.split('?')[1]
.split('&')
.map(keyValue => keyValue.split('='))
.reduce<QueryStringParams>((params, [key, value]) => {
params[key] = value;
return params;
}, {});
type QueryStringParams = {
[key: string]: string;
};
// Return URL parameter called "orderId"
return queryStringParams.orderId;