Проблема с использованием click () на входе[type=file]
у меня проблема с click()
функции. В опере это не работает.
Я пытаюсь сделать input type=file
кликнул на onclick
событие другого элемента. Мне нужно стиль моего ввода type=file
элемент, поэтому я сделал его невидимым и заменил его простым нажатием стиле. Теперь я хочу, чтобы элемент файла был нажат при нажатии кнопки.
Я не могу использовать jQuery, потому что я использую библиотеку MooTools для календаря на своей странице, и это создает конфликт, когда я пытаюсь использовать на jQuery. Я также попытался избежать конфликта, используя jQuery.noConflict();
но я не мог этого сделать, потому что я новичок в jQuery. Вот мой HTML код:
<input name="myfile" id="uploadme" type="file" style="visibility:hidden; width:1px;" onchange="this.form.submit()"/>
<input type="button" id="clickme" onclick="show_upload()"/>
и вот мой код JavaScript:
function show_upload()
{
document.getElementById('uploadme').click();
}
Я также пробовал этот код jQuery, но я не мог заставить его работать без конфликта с библиотекой MooTools:
jQuery.noConflict();
(function($){
$('#clickme').click(function($){
$('#uploadme').click();
})(jQuery);
});
5 ответов
Я не уверен в щелчке ввода (это может быть просто невозможно из-за соображений безопасности), но ваш код jQuery не совсем корректен.
jQuery.noConflict();
(function($){
$('#clickme').click(function(){ // The $ is not necessary - you already have it
$('#uploadme').click();
}); // You should remove (jQuery) because you don't want to call the function here
})(jQuery); // you need (jQuery) to actually call the function - you only defined the function
в любом случае, этот ответ говорит, что вы не можете делать то, что хотите в Opera:в JavaScript можно ли программно создать событие" click " для элемента ввода файла?
input[type=file]
очень своеобразный тип ввода, вы не можете сделать с ним много, в первую очередь по соображениям безопасности.
Я предполагаю здесь, но вы, возможно, хотите, чтобы у вас была кнопка загрузки в стиле? В этом случае я должен разочаровать вас, вы не можете сделать это с HTML. Вам придется использовать HTML5 или Flash (например, SWFUpload)
Это ошибка Opera, но есть возможность получить результат другим способом, используя <label>
tag:
<input type="file" id="file" style="position: absolute; visibility: hidden;">
<label for="file" id="file-label"></label>
<a onclick="$('#file-label').click()">Browse..</a>
это не невозможно:
var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent('click', true, true, window);
setTimeout(function(){ document.getElementById('input_field_id').dispatchEvent(evObj); },100);
но как-то это работает, только если это в функции, которая была вызвана через click-event.
таким образом, у вас может быть следующая настройка:
HTML-код:
<div onclick="openFileChooser()" class="some_fancy_stuff">Click here to open image chooser</div>
<input type="file" id="input_img">
JavaScript:
function openFileChooser() {
var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent('click', true, true, window);
setTimeout(function()
{
document.getElementById('input_img').dispatchEvent(evObj);
},100);
}
невозможно нажать эту кнопку с помощью JavaScript (как сказали друзья), но посмотрите на это:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Lorem ipsum</title>
</head>
<body>
<input type="file" id="first" style="width:200px; background-color:red">
<input type="file" id="second" style="width:200px; background-color:green; position:relative; left:-100px; opacity:0">
<script>
document.getElementById("first").onchange = function(){alert("first")}
document.getElementById("second").onchange = function(){alert("second")}
</script>
</body>
</html>
вы можете сделать что-то подобное. Единственная проблема заключается в том, что вы должны знать размеры этих входов. Хм... Может, это и не проблема. Можно задать размеры. :>