2014-12-06 122 views
1

我有一个包含项目对象的项目数组。我想创建一个函数,当我点击某个项目时,它将从数组中移除。我知道我需要使用类似拼接的东西,并且我已经实施了以下解决方案,但它似乎起作用。从数组中删除对象onclick

谁能告诉我我做错了什么。

function updateView() { 


for (var i = 0; i < storeItems.length; i++) { 
    output += "<a href='#' id='itemTitle' onclick='removeRecord(" + i + ");'>" 
    + storeItems[i].title + " " + "\n" + "</a>"; 

    } 

function removeRecord(i) { 

    storeItems.splice(i, 1); 
    var newItem = ""; 

    // re-display the records from storeItems. 

    for (var i = 0; i < storeItems.length; i++) { 
     newItem += "<a href='#' onclick='removeRecord(" + i + ");'>X</a> " 
     + storeItems[i] + " <br>"; 
    }; 
    document.getElementById('foods').innerHTML = newItem; 
} 

我觉得这个错误是在下面的一行:

output += "<a href='#' id='itemTitle' onclick='removeRecord(" + i + ");'>" + storeItems[i].title + " " + "\n" + "</a>"; 

因为当我尝试做一个测试用一个简单的警报甚至不承认“的onclick”事件。

谁能告诉我我做错了什么。此外,如果你认为你需要更多的信息来回答这个问题,请让我知道。

预先感谢您。

+0

您可以使用您喜欢的代码的任何缩进,但在询问其他人的帮助时,请有礼貌地花点时间将代码可读地格式化为一致的,有点标准的形式。像http://jsbeautifier.org这样的工具可以提供帮助。 – 2014-12-06 15:34:33

回答

2

的Try ...

storeItems = storeItems.splice(i, 1); 

WRONG:基本上,你要拼接阵列的东西分配。

UODATE

这里是我会做的方式......在jsFiddle测试:

var storeItems = [{ 
    title: "Dog" 
}, { 
    title: "Cat" 
}, { 
    title: "Bird" 
}]; 

var foods = document.getElementById('foods'); 
foods.addEventListener('click', function(e) { 
    var index = e.target.getAttribute('value'); 
    storeItems.splice(index, 1); 

    // re-display the records from storeItems. 
    updateView(); 
}); 

function updateView() { 
    var output = ""; 
    for (var i = 0; i < storeItems.length; i++) { 
     output += "<a href='#' class='item' value='" + i + "'>" + storeItems[i].title + " " + "\n" + "</a>"; 

    } 
    document.getElementById('foods').innerHTML = output; 
} 


updateView(); 

HTML:

<div id='foods'></div> 

这有效地采取onclick事件关闭锚点标记(此时您可以将它们放在任何类型的标记上)并且我还在Listener中重用了您的updateView代码,以便它只需要在一个位置维护。

+0

嗨,非常感谢你的回复。我尝试过,但问题是没有调用“onclick”事件侦听器。当我点击该项目时,我的控制台中出现以下错误。 “removeRecord没有定义”它找不到删除记录的函数。我的语法可以在下面的行中分配点钟监听器:output + =“" + storeItems[i].title + " " + "\n" + "”; – Skywalker 2014-12-06 15:51:59

+0

完成返工已到位......我原来的建议是错误的。 – rfornal 2014-12-06 16:24:13

+0

谢谢你完美的工作。我只是想问,所以我明白这一点,那么你做了什么是一个onclick事件监听器,以放置在食品div中的所有元素?我只是想了解你是如何做到的。再次谢谢你。 – Skywalker 2014-12-06 16:44:43