Как выйти из функции nextAll()

#jquery

#jquery

Вопрос:

У меня есть эта функция :

 $('.trackInputHours').change(function() {
    var changeVal=$(this).val();
    $(this).closest('.trackOn').nextAll('.trackOn').find('.trackInputHours').val(function(i, v){
        if((v=='??') || (v<changeVal)) {
            return changeVal; 
        } 
    });
});             
  

и я хотел бы, nextAll() когда v==changeVal , прервать; сохраняя старые значения этих элементов.

Своего рода } else break ;

Как я могу это сделать?

Комментарии:

1. вы имеете в виду продолжить работу со стеком $ (this).closest(‘.trackOn’)?

2. Итак, вы хотели бы выбрать все .trackOn элементы после $(this).closest('.trackOn') , которые не содержат .trackInputHours элемента со значением, равным changeVal , которое является значением .trackInputHours элемента, который только что был изменен?

3. Я имею в виду, что не проверяет дочерние элементы trackInputHours для divs следующего трекона

4. @kwichz Вы говорите, что хотите остановиться, когда найдете элемент, где v==changeVal . То есть вы специально хотите игнорировать .trackInputHours последующие, даже если их значение меньше?

5. ДА… также, если они меньше…

Ответ №1:

Как насчет того, чтобы просто использовать .each() и использовать return false для остановки итерации.

 $('.trackInputHours').change(function() {
    var changeVal=$(this).val();
    $(this).closest('.trackOn').nextAll('.trackOn').find('.trackInputHours').each(function(){
        var v = $(this).val();
        if((v=='??') || (v<changeVal)) {
            $(this).val(changeVal);
        } 
        if(changeVal == v){
            return false;
        }
    });
});  
  

Пример в jsfiddle

введите 5, и он изменит все <input type="text"/> , пока не достигнет 5

Комментарии:

1. Да, это работает. Но странно? .each() следует применять к текущему элементу nextAll, а не к стеку nextAll :O

Ответ №2:

Возможно, вместо nextAll функция nextUntil выполняет то, что вы хотите?

Комментарии:

1. Но он также проверяет условие вместо элементов DOM?