按选项值订购商品

时间:2014-09-01 10:24:23

标签: javascript html

我已经得到了下面的代码,代码很好,唯一的问题是,如果我按顺序做错了,我想纠正它,整个文本都会被删除并从头开始:

function getValues() {
var result = [];
var me = this; 
$('select').each(function (idx, el) {
    var $el = $(el);
    result[3*$el.val()+idx]=($el.next('input[type="hidden"]').val() + ' ' + $el.val());
    if (me === el) return false;
});
console.log(result);
$('#res').html(result.join(' '));
}

$('select.startID,input[type="hidden"]').change(getValues);


<select name="startID[]" class="startID">
<option value="0">SELECT</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="hidden" name="startText[]" value="Text1">
Text1
<br />

<select name="startID[]" class="startID">
<option value="0">SELECT</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="hidden" name="startText[]" value="Text2">
Text2

<br />

<select name="startID[]" class="startID">
<option value="0">SELECT</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="hidden" name="startText[]" value="Text3">
Text3
<div id="res"></div> 

DEMO:http://jsfiddle.net/aburayane/zwzx7ann/

因此隐藏输入中选择框前面的文本是相同的,我应该从与前面文本对应的选择框中选择相同的值,例如1 =&gt; Text1,2 =&gt; Text2,3 =&gt; Text3,如果错误的话,我选择了1 =&gt; Text2,2 =&gt; Text1和3 =&gt; Text3,所以我的错误在Text1和Text2中,我没有选择正确的值,如果我想纠正,整个文本都会被删除并从头开始。

我的问题:是否有任何方法可以在不删除数据的情况下对打印的文本进行更正,应该将它们交换在一起。

提前致谢

1 个答案:

答案 0 :(得分:1)

这里没有什么奇怪的,因为一旦getValues循环中的当前select元素是要更改的元素,你提到each函数就会中断:

if (me === eq) return false;

因此,一旦为所有三个select元素选择了一些值,就会回到第一个元素,例如,迭代将更改第一个元素并检查它是否是要更改事件的元素{ {1}}将绝对禁止后续迭代,因此即使之前已经选择了以下return false元素选项也不会被显示。

您需要的是一个直截了当的select,不要只检查当前function是否正在被更改,还要检查下一个项目是否已经存在于结果字符串。这可以通过检查后面的值是否已经在 res html字符串中来完成,条件可能是这样的:

select

nextItemWasAlreadyShown函数声明如下所示:

if ((me === el) && !nextItemWasAlreadyShown(idx + 1)) 
  return false; //Check if next element (idx + 1) of the current select was already in the res string

您可以在JSFiddle的修改版本中找到完整演示。