我試圖通過單擊anchor
標記來模擬輸入標記上的單擊,這樣我可以隱藏輸入並將圖像包裹在錨標記中。在輸入上模擬點擊事件 - JavaScript
這個工程使用jQuery觸發功能,但我不能讓它只用 「普通」 的Javascript工作:
jQuery的版本:
let fake = $('.fake')
fake.click(function(e) {
e.preventDefault();
$('#user_avatar').trigger('click');
})
#user_avatar { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" name="file_field" id="user_avatar">
<a href="#" class="fake">
<img src="https://fthmb.tqn.com/65lNzIRNfZY4xY02D17b1RcGvso=/960x0/filters:no_upscale()/kitten-looking-at-camera-521981437-57d840213df78c583374be3b.jpg" width="320" height="240">
</a>
JavaScript版本使用new Event
和dispatchEvent
:
let fake = document.querySelector('.fake');
fake.addEventListener('click', function(e) {
e.preventDefault();
console.log('testing');
let clickEvent = new Event('click');
document.getElementById('user_avatar').dispatchEvent(clickEvent)
})
#user_avatar { display: none; }
<input type="file" name="file_field" id="user_avatar">
<a href="#" class="fake">
<img src="https://fthmb.tqn.com/65lNzIRNfZY4xY02D17b1RcGvso=/960x0/filters:no_upscale()/kitten-looking-at-camera-521981437-57d840213df78c583374be3b.jpg" width="320" height="240">
</a>
的執行console.log呈現,但沒有被分派的事件,我究竟做錯了什麼?
約'的document.getElementById( 'user_avatar')是什麼。點擊()'? – DontVoteMeDown
爲什麼不將樣式設置爲像圖像一樣? – izulito
無恥的插件:[適用於所有HTML元素的通用合成事件調度函數](https://stackoverflow.com/questions/2381572/how-can-i-trigger-a-javascript-event-click/2381862#2381862) ...(不只是像'click()')方法那樣的輸入/鏈接 –