如果您只是直接添加此聯事件處理程序的模板元素,那麼它並不奇怪,它永遠不會觸發。 Fine Uploader模板相當原始,因爲模板被解釋爲一個HTML字符串,然後用於在容器元素(引用爲your element
option)中創建DOM元素。
你真的不應該使用內聯事件處理程序。這種方法有很多缺點。我在書中更深入地討論了這個問題 - Beyond jQuery。據我所知,附加事件處理程序的方法根本不需要。相反,在構建Fine Uploader的新實例之後,只需使用addEventListener
將所選事件處理程序附加到輸入元素即可。例如,如果你<input>
元素被賦予的「QQ編輯字幕」,就可以把「變」事件處理這樣的CSS類名:
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.querySelector('.qq-edit-caption')
.addEventListener('change', function(event) {
// event handler logic here...
})
...如果你正在創建此輸入元素,並且需要將這些輸入元素的「更改」處理程序附加到全部,則應該將一個委託的事件處理程序附加到容器元素,並根據最初觸發該事件的元素作出反應(查看target
事件的屬性)。您可以通過查看event.target
的父<li>
的CSS類來確定文件的ID,也可以在目標元素的父<li>
上查找「qq-file-id」屬性(值將爲文件ID)。該代碼可能是這個樣子:
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.addEventListener('change', function(event) {
if (event.target.className.indexOf('qq-edit-caption') >= 0) {
var fileId = parseInt(event.target.getAttribute('qq-file-id'))
// ...
}
})
謝謝Ray。這很有道理,爲什麼我的代碼沒有觸發;讓我試驗一下你的建議,看看我可以採取的措施。將盡快更新..... – bizready
Ray的建議爲我工作,但我無法從我的輸入元素得到qq-file-id屬性。我不得不導航出當前元素來查找更新按鈕元素,然後禁用該按鈕。 ex:updateButton = event.target.parentElement.parentElement.querySelector('。file-section-button'); – bizready
@bizready您可以使用[getId' Fine Uploader UI方法](http://docs.fineuploader.com/branch/master/api/methods。)獲取任何文件元素或文件元素子/後代元素的文件ID。 HTML#的getId)。 –