2015-11-25 35 views
0

我有一個問題,生成一個輸入文件類型,點擊事件不起作用。在HTML中生成輸入可以本地點擊,或者在jquery或更高版本上點擊事件。但是,當我嘗試像..輸入文件,點擊沒有工作..沒有事件

$('body').append('<input type="file" id="asd" />') 

這些作品都沒有,甚至做點擊本地,不能正常工作,它的出現,但它似乎沒有任何事件。

document.getElementById('asd').click() 
$('#asd').click() 
document.getElementById('asd').dispatchEvent(new Event('click')); 

這可能發生?它不會在Chrome或Firefox,我的英語工作...

即使運行在#1這些命令,這並不工作,所以它不可能......

對不起。

+0

您可以使用document.getElementById('asd')。trigger(「click」); –

+0

您在** Developper Console **中有錯誤嗎? –

+0

查看本演示http://jsfiddle.net/58qakxnc/ – guradio

回答

1

問題在於第二個「輸入」元素是動態添加的,並且點擊綁定發生在第二個「輸入」元素存在之前。這就是爲什麼它沒有影響它。你可以將處理程序附加到每個錨點,然後再插入它。

試試這個代碼,點擊事件綁定:

$('body').on('click', '#ads', function(e){ 
    ... 
}); 

順便說一句,讓您的輸入元素的類名是更好的,並與類名click事件綁定就像」的.class'

+0

並且不想創建事件,我想讓用戶本機地選擇文件瀏覽器。我的輸入將被隱藏,然後調用jquery想要做的點擊事件或類似的東西。我不知道我是否自己解釋:( –

2

其無法在沒有用戶操作的情況下模擬文件輸入點擊事件。如果你想隱藏文件輸入,那麼你必須添加一個按鈕供用戶點擊。在它的點擊事件中,你應該模擬文件輸入的點擊事件。換句話說,如果你試圖觸發一個文件輸入點擊從event which is not trusted by the browser然後點擊將無法正常工作。檢查這個問題及其答案。 Trigger click on input=file on asynchronous ajax done()

$('body').append("<input style='visibility:hidden;' type='file' id='asd'/><button id='trigger'>trigger file input</button>") 
 

 
$('#trigger').on('click',function(){$('#asd').click()});
#trigger{ 
 
background:red; 
 
    color:white; 
 
    padding:20px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

)如果它有效,但是如果不是從按鈕調用,因爲它不起作用?例如,超時時間爲1秒,然後單擊...'setTimeout(函數(){$('#asd')。點擊();},1000)' –

+0

@AitorChicharro文件輸入將不會工作1000毫秒後正如我以前回答。/2972​​8705 /觸發鍵式上,輸入文件名上異步的Ajax-做/ 29873845#29873845 – tkay

0

文件輸入不能自動無需任何用戶交互點擊出於安全目的。如果一個頁面在頁面加載時自動激活任何東西,這將是非常糟糕的。

您可以使用label來點擊用戶輸入的文件,如下所示。

$('body').append('<input type="file" id="asd" /><label for="asd">Click</label>');