0
我工作的JavaScript客戶端包括和我使用此代碼:JavaScript客戶端包含未注射的onclick事件
window.onload = function() {
var elements = document.getElementsByTagName('*'),
i;
for (i in elements) {
if (elements[i].hasAttribute && elements[i].hasAttribute('data-include')) {
fragment(elements[i], elements[i].getAttribute('data-include'));
}
}
function fragment(el, url) {
var localTest = /^(?:file):/,
xmlhttp = new XMLHttpRequest(),
status = 0;
xmlhttp.onreadystatechange = function() {
/* if we are on a local protocol, and we have response text, we'll assume
* things were sucessful */
if (xmlhttp.readyState == 4) {
status = xmlhttp.status;
}
if (localTest.test(location.href) && xmlhttp.responseText) {
status = 200;
}
if (xmlhttp.readyState == 4 && status == 200) {
el.outerHTML = xmlhttp.responseText;
}
}
try {
xmlhttp.open("GET", url, true);
xmlhttp.send();
} catch(err) {
/* todo catch error */
}
}
}
這上面的代碼工作真的很好,當頁面加載到包括外部.html文件,使用以下語法:
<div id="myid" data-include="templates/myExternalTemplate.html"></div>
上述模板將被加載到頁面中。
當我嘗試的模板從一個到另一個使用onclick事件改變我的問題來了:
<div onclick="changeTemplate();"></div>
我曾嘗試:
function changeTemplate() {
document.getElementById("myid").setAttribute("data-include","templates/2.html");
}
以上函數返回以下錯誤:
*TypeError: document.getElementById(...) is null*
我該如何做這項工作?
資本化'Function'一定是複製錯誤,或者函數永遠不會運行,並得到了錯誤。 – Barmar
@ Satch3000如果元素有一個ID,你不會得到一個錯誤,說'getElementById'返回null。 – Barmar
它在模板中有ID嗎?當您設置'outerHTML'時,您將替換整個元素,以便從返回的HTML中獲取ID。 – Barmar