按钮事件在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);
这样,只有在附加上传按钮时才会添加点击事件。