Javascript无法正常工作?
由于某种原因,这不起作用? 我想用ul#list
填充一些项目,但它不起作用。Javascript无法正常工作?
var list = "";
for (var i = 0 ; i<=history.length; i++) {
list += "<li onclick=\"copyShortURL('"+history[i].shortURL+"');\"><div class=\"short\">"+history[i].shortURL+"</div><div class=\"long\">"+history[i].longURL+"</div></li>";
}
document.getElementById('list').innerHTML = list;
谁能告诉我什么错:( 我的意思是它没有做任何事情,没有列表项被放入名单?
PS这是mobilesafari只:)
createElement方法仅使用元素名称,例如。 document.createElement("li")
因此,您要么在代码中使用一系列createElements和appendChilds以及少量赋值给innerHTML来构建DOM。或者,通过最终分配给它的innerHTML,将HTML构建为一个字符串以附加到“list”。
这里是字符串形式: -
var asHTML = [];
for (var i = 0 ; i<=history.length; i++)
{
asHTML.push("<li onclick=\"copyShortURL('"+history[i].shortURL+"');\"><div class=\"short\">"+history[i].shortURL+"</div><div class=\"long\">"+history[i].longURL+"</div></li>");
document.getElementById("list").innerHTML += asHTML.join("\n");
}
这似乎不工作吗? – tarnfeld 2010-01-01 12:36:57
在那里有一个虚假变种原来,删除,测试,在我的机器上工作不知道关于Iphone – AnthonyWJones 2010-01-01 12:56:12
仍然没有:( – tarnfeld 2010-01-01 12:57:44
的document
的createElement
方法花费你希望创建的元素名称一个字符串。然后,您可以使用DOM方法和属性来分配点击处理程序,然后使用innerHTML或DOM方法来创建内部元素。
您的循环中也有一个错误:当您检查history
阵列的长度时,您需要<
而不是<=
。
var ele, div, list = document.getElementById("list");
var createClickHandler = function(url) {
return function() {
copyShortURL(url);
};
}
for (var i = 0, len = history.length; i < len; ++i)
{
ele = document.createElement("li");
ele.onclick = createClickHandler(history[i].shortURL);
div = ele.appendChild(document.createElement("div"));
div.className = "short";
div.appendChild(document.createTextNode(history[i].shortURL));
div = ele.appendChild(document.createElement("div"));
div.className = "long";
div.appendChild(document.createTextNode(history[i].longURL));
list.appendChild(ele);
}
这似乎是最逻辑的...应该这个代码是否高于或低于元素? – tarnfeld 2010-01-01 12:41:37
@anthony不要担心,它的一个webapp - 对于iPhone :) – tarnfeld 2010-01-01 12:42:15
@tarnfeld:你不认为这个小块是值得的在你的问题中提到?长期以来,“不起作用”是什么意思? – AnthonyWJones 2010-01-01 12:45:07
我会使用DOM来追加孩子,然后添加classnames和事件处理程序给这些孩子。
这里是一个多浏览器功能我用
function addEventHandler(obj,eventName,handler){
if (document.addEventListener){
obj.addEventListener(eventName,handler,false);
} else if (document.attachEvent){
obj.attachEvent("on"+eventName,handler);
}
}
creat an array for tyhe bew elementsa and divs;
var elements = new Array();
var newDivsShort = new Array();
var newDivsLong = new Array();
then in your for loop you can,
for (var i = 0 ; i<=history.length; i++)
{
newDivsShort[i] = document.createElement('div');
newDivsLong[i] = document.createElement('div');
elements[i] = document.createElement('li');
newDivsShort[i].className = "short";
newDivsLong[i].className = "long";
elements[i].appendChild(newDivsShort[i]);
elements[i].appendChild(newDivsLong[i]);
addEventHandler(elements[i],click,copyShortURL(history[i].shortURL));
}
您可能需要使用类似超时功能的格式传递一个paramater。
你的意思是不工作?这些项目没有被显示?你确定'历史'数组已填充? – 2010-01-01 12:40:25
如果我提醒'history' json数组 - 它有4个[object object]'s出现,这是正确的,因为有4个项目:) – tarnfeld 2010-01-01 12:42:57
实际上看不到你的代码有什么问题现在看起来不错对我来说。也许它是一个mobilesafari问题?考虑将其他适当的标签放在你的问题 – AnthonyWJones 2010-01-01 13:00:44