2014-09-01 2 views
0

У меня есть код ниже, код в порядке, единственная проблема в том, что если я сделал что-то неправильно по порядку, и я бы хотел его исправить, весь текст был удален и запущен с самого начала:Элементы заказа по значению опциона

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 => Text1, 2 => Text2, 3 => Text3, если по ошибке я выбрал 1 => Text2, 2 => Text1 и 3 => Text3, поэтому мои ошибки в Text1 и Text2, я не сделал выберите правильный значения, если я хотел бы исправить, весь текст получил стирание и начало с самого начала.

Мой вопрос: есть ли способ внести исправления в текст, напечатанный без удаления данных, его следует заменить.

Заранее спасибо

ответ

1

Там нет ничего странного здесь, так как вы упоминались вам getValues функцию, чтобы сломать один раз текущего select элемента в петле each является один изменяться с:

if (me === eq) return false; 

Итак, как только вы выбрали какое-то значение для всех трех элементов select, вы вернетесь к первому, например, итерация изменит первый элемент и проверит, является ли это одним субъектом для изменения события, и return false, который будет абслютно предотвратить последующие итерации, поэтому следующие элементы выбора select не будут отображаться, даже если они уже были выбраны раньше.

Что вам нужно, это прямолинейный function, чтобы не только проверить, является ли текущий select измененным, но и проверить, присутствует ли следующий элемент в строке результата. Это может быть просто сделано путем проверки, если последнее значение уже в HTML строку Рез условие, то может быть так:

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

Если объявление функции nextItemWasAlreadyShown выглядит следующим образом:

function nextItemWasAlreadyShown(index) { 
    var continueLoop = false; 
    var resText = $('#res').html(); 
    var text = $('select').eq(index).next('input[type="hidden"]').val(); 
    if (resText.indexOf(text) > -1) 
    continueLoop = true; 
    return continueLoop; 
} 

Полную демонстрацию можно найти в модифицированной версии вашего JSFiddle.

+0

приведенный выше пример упорядочен по тексту не по значению –

+0

Что вы имеете в виду? Мой фрагмент направлен на решение вашей основной потребности * «внесите исправления в текст, напечатанный без удаления данных» *. Не знаю, о чем вы здесь говорите. – tmarwen

+0

данных не удаляется, но заказ перепутался –

Смежные вопросы