【发布时间】:2014-12-01 14:57:07
【问题描述】:
我的 PHP 表单中有一个篮子(一个数组),用户可以在其中添加他们选择的电影。 下图,可能更能说明情况:
问题: 如图所示,用户可以单击垃圾图像从列表中删除电影。现在的问题是,如果他/她想再次将这部电影重新添加到选定列表中,则会显示消息“这部电影已经在列表中”。,而它应该仅当电影现在不在列表中时才显示!
这是我的代码(form.php):
<script type="text/javascript">
var master_basket = new Array();
var selectedMovies = {};
$(document).ready(function () {
/// SOME CODES UNRELATED TO MY QUESTION ....
function get_index_of_item(movie_name) {
for (var i = 0; i < master_basket.length; i++) {
if (master_basket[i].movie_name === movie_name){
return i;
}
}
return -1;
}
function addToBasket(item) {
master_basket.push(item);
showBasketObjects();
}
function showBasketObjects() {
$("#basket_content").empty();
$.each(master_basket, function(k,v) {
var name_and_year = v.movie_name;
console.log(v.movie_name);
console.log(v.movie_year);
$("#basket_content").append("<div class='item_list'>" + v.movie_name + "<a class='remove_link' href='" + name_and_year + "'><img width='20' src='http://i61.tinypic.com/4n9tt.png'></a></div>");
});
$(".remove_link").on('click', function (e) {
var name_year = $(this).attr("href");
console.log(name_year);
var index = get_index_of_item(name_year[0]);
console.log(index);
if (index !== -1) {
master_basket.splice(index, 1);
console.log(master_basket);
$(this).closest('.item_list').remove();
} else {
console.log("DEBUG: NO ITEM IN THE LIST");
}
return false;
});
}
这是我的更新 searchfilm.php:
<?php
// QUERY DB
while ($row = $query->fetch(PDO::FETCH_ASSOC)):
?>
<tr>
<td><img class='imdbImage' id="image" src='imdbImage.php?url=<?php echo $row['posterLink']; ?>' alt="" /></td>
<td><label id='year'><?php echo $row['year']; ?> </label></td>
<td><a href="http://www.imdb.com/title/<?php echo urlencode($row['ImdbId']); ?>"><?php echo $row['movieName']; ?></a></td>
<td><a href="javascript:addmovie('<?php echo $row['movieName'], "_", $row['year']; ?>')" class="add">Add to list</a></td>
</tr>
<?php
endwhile;
?>
<script type="text/javascript">
function addmovie(movieName) {
var obj = {
"movie_name":movieName
};
var index = parent.window.opener.get_index_of_item(movieName);
if(index === -1) {
parent.window.opener.addToBasket(obj);
} else {
alert("This movie is already in the selected list");
}
}
</script>
有人可以帮我解决一下吗?
【问题讨论】:
-
你没有调试的方法吗?您使用的是哪个 IDE?在最坏的情况下,没有 IDE(耶!),您可以在代码中添加一些 alert() 来查看篮子中的内容。
-
我删除了我的答案,因为我很困惑。你有
addToBasket()和addmovie()。一种是将项目推入master_basketArray,另一种是将它们作为命名属性添加到master_basketArray 对象上。为什么两者都有? -
无论如何,您将对象添加到数组中,然后尝试使用其名称和年份获取其
.indexOf()。那是行不通的。它无法知道该字符串应该与movie_name/movie_year属性进行比较。您需要手动搜索数组。 -
@sixfingeredman:我在表单的主页上有 addToBasket 功能,其中有一个文本框和搜索按钮。
addmovie是我在其他页面(有DB查询)中使用的函数,如果您看到其中包含更多代码..您认为我做错了吗? -
@sixfingeredman:我认为问题在于我删除了
.item_list'div,而movieName 仍在master_basket 中.. 所以,我想我必须从购物篮列表中删除它而不是删除div ..,你怎么看?
标签: javascript php arrays