按钮事件在fire fox os中不起作用

function listContents(storagename) { alert("inside function"); //Clear up the list first $('#results').html(""); var files = navigator.getDeviceStorage(storagename); var cursor = files.enumerate(); cursor.onsuccess = function () { //alert("Got something"); var file = this.result; if (file != null) { var tagvalue = $("

" + file.name + "," + file.lastModifiedDate + "," + file.type + "," + file.size + "

").appendTo('#results'); console.log('tagvalue is ' + tagvalue); tagvalue.appendTo("#results"); console.log('tagvalue is upended ' + tagvalue); var r = $(''); console.log('button created!' + r); r.appendTo("#results"); console.log('button uploded!' + r); this.done = false; } else { this.done = true; } if (!this.done) { this.continue(); } } $('#upload').on('click', function () { console.log('onclick function!'); //alert('blah'); }); }

在这里我动态创建了上传按钮,我已经应用onclick事件我希望在点击上传按钮之后用户能够在服务器上传音频文件。如果我将在正常按钮上应用onclick事件正在工作但是动态创建按钮它不管用。 任何人都可以帮助我吗?

使用event delegation

事件委托允许我们将单个事件侦听器附加到父元素,该元素将为匹配选择器的所有后代触发,无论这些后代现在是存在还是将来添加。

对于动态添加的元素,使用静态父级将事件添加到动态添加的元素。

 $('#results').on('click', '#upload', function () { // Handler here }); 

见Doc: on

你的问题:

您正在onsuccess函数调用上创建元素上载。 可以在一段时间之后进行此调用 – 异步并且当您的#upload按钮可能尚未添加到DOM时,您的绑定onclick就在现场进行。 这就是为什么你需要将click事件附加到已经存在于DOM中的alement,例如results

这就是为什么你需要获得现有的元素( results )和绑定:在任何#upload中都会附加到这个,给他这个onclick事件。

 $('#results').on('click', '#upload', function () { // Handler here }); 

我希望我已经解释了你的问题。

更新:您可以在线下移动您的点击装订:

 console.log('button uploded!' + r); 

这样,只有在附加上传按钮时才会添加点击事件。