Javascript push替换数组中的旧值
也许是因为我工作了一整天,看不出问题所在。但在以下代码中,警报仅显示最后添加的值,而不会将值推送到数组中:( 一些html:Javascript push替换数组中的旧值,javascript,arrays,push,Javascript,Arrays,Push,也许是因为我工作了一整天,看不出问题所在。但在以下代码中,警报仅显示最后添加的值,而不会将值推送到数组中:( 一些html: <div class='sortcriteria advanced'> <label>Sort by: </label> <div class='controlWrapper'> <input type="text
<div class='sortcriteria advanced'>
<label>Sort by: </label>
<div class='controlWrapper'>
<input type="text" placeholder='Any' value='Any' class='dropDownExpand'>
<span class='icon dropDownExpand' title='Select property type'></span>
<ul class='dropdownContent'>
<li><a href='#' class='price'>Price ascending</a></li>
<li><a href='#' class='price'>Price descending</a></li>
<li><a href='#' class='party'>Party size ascending</a></li>
<li><a href='#' class='party'>Party size descending</a></li>
<li><a href='#' class='bedrooms'>Number of bedrooms ascending</a></li>
<li><a href='#' class='bedrooms'>Number of bedrooms descending</a></li>
<li><a href='#' class='star'>Star rating ascending</a></li>
<li><a href='#' class='star'>Star rating descending</a></li>
</ul>
</div> ...
排序方式:
...
您需要将
var currentSelectedGroups=[];
移动到每个循环之外。您为每个实例声明一次它-它们都使用自己版本的变量,因为它位于每个函数的局部范围内
请记住,在javascript functions=scope中,正如我在前面的评论中询问(并怀疑)的那样,您需要移动:
var currentSelectedGroups = [];
在.each()
循环外部。实际上,在循环的每次迭代中,您都将其重新初始化为一个空数组,因此它的值不会超过一个。您可以这样做:
var currentSelectedGroups = [];
$.each(sortControl.advancedDropdownContent.parent(), function () {
var dropdownContent = $(this).find('.dropdownContent');
var input = $(this).find('input');
$(this).find('.dropDownExpand').live('click', function (event) {
sortControl.advancedDropdownContent.not(dropdownContent).hide('fast');
dropdownContent.toggle('fast');
event.preventDefault();
});
$(this).find('li a').bind('click', function (event) {
var criteria = $(this).text();
//if (!currentSelectedGroups.inArray($(this).attr('class'), true)) {
input.attr('value', criteria);
currentSelectedGroups.push($(this).attr('class'));
//}
dropdownContent.toggle('fast');
event.preventDefault();
alert(currentSelectedGroups);
});
});
其中是
var currentSelectedGroups=[]
声明?它是在全局范围内,从一次单击到下一次单击都能存活下来吗?还是它是某个局部变量,并且被销毁和重新创建,因此它只包含您刚才添加到它的值?我更新了代码的更多部分并提出了问题我不知道您的意图是什么,但您正在创建一个新的currentSelectedGroups是数组每次迭代的
元素。非常感谢。我想我快瞎了。今天已经做了9个小时了……这只是瞎了。请添加您的评论作为回答。还请注意,使用$(this)。查找('.dropDownExpand').live('click',…
,the.live()
处理程序不会将自身局限于此
的后代。基本上,您正在执行$('.dropDownExpand')。live('click',…
每次迭代一次,因此您可能会绑定冗余处理程序。错过这一次我感到非常羞愧。不,我们每隔一段时间都会有很长的一天,有时您只是因为所有的树而看不到森林;)
var currentSelectedGroups = [];
$.each(sortControl.advancedDropdownContent.parent(), function () {
var dropdownContent = $(this).find('.dropdownContent');
var input = $(this).find('input');
$(this).find('.dropDownExpand').live('click', function (event) {
sortControl.advancedDropdownContent.not(dropdownContent).hide('fast');
dropdownContent.toggle('fast');
event.preventDefault();
});
$(this).find('li a').bind('click', function (event) {
var criteria = $(this).text();
//if (!currentSelectedGroups.inArray($(this).attr('class'), true)) {
input.attr('value', criteria);
currentSelectedGroups.push($(this).attr('class'));
//}
dropdownContent.toggle('fast');
event.preventDefault();
alert(currentSelectedGroups);
});
});