jquery или js Найти все inputы со значением больше чем в изменяемом поле

Тема в разделе "Другие языки", создана пользователем notzevs, 3 авг 2010.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. notzevs

    notzevs Создатель

    Регистр.:
    27 сен 2009
    Сообщения:
    30
    Симпатии:
    5
    Задача найти Все inputы где value больше чем в том inputе который изменился. После этого добавить ко всем кроме измененного 1.
    Делаю нумерацию позиций фоток. Хотелось бы чтобы при изменении у одной фотки позиции, номера автоматически изменялись у других.
    Желательно подсказать на jquery.
    Вот приблизительный код
    HTML:
    
    var pos=this.value;
    $('input:text[value>pos]').val('val()+1');
    
    в нем не учитывается что к измененному inputу прибавлять не нужно и я не в курсе как правильно указать value > какой-то переменной. Знаю как это реализовать на простом js, но сейчас изучаю jquery и хотелось бы узнать реально ли это сделать на jquery.
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    может так
    HTML:
    
            $("input:text").change(function(){
                val = $(this).val();
                $("input:text").each(function (i) {
                    input_val = parseInt($(this).val());
                    if(input_val>val)$(this).val(input_val+1);
                });
            });
    
    или использовать визуальное сортирование

    http://jqueryui.com/demos/draggable/#sortable
     
    notzevs нравится это.
  3. notzevs

    notzevs Создатель

    Регистр.:
    27 сен 2009
    Сообщения:
    30
    Симпатии:
    5
    Спасибо. Все работает.
    Вот только я понял, что надо реализовать это через другую логику. В данном случае если есть фото с позициями: 1,2,3,4. То если изменить поз. №1 на 2, а потом еще раз на два, ко всем поз. больше 2 добавиться два раза +1. И может получиться две поз. с номером 2.
    И куча пропущенной номерации. и если пользователь поменяет туда-сюда пять раз, то разрыв между числами будет значителен.
    Думаю надо после изменения искать эллемент у которого такое же значение но к примеру другое имя или id и добавлять +1, а потом искать уже к тому эллементу пару с одинаковым значением и тоже +1.Так не будет одинаковых значений и пробелов.
    Есть предложения как это сделать, кроме визуализации?
     
  4. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    может сразу взять разницу изменения числа и прибавить ко всем номерам которые больше.

    HTML:
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>jQuery</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
        <script type="text/javascript">
        $(document).ready(function(){
            
            var input=new Array(); 
            
            create();
            //заполняет массив полей
            function create(){
                $("input:text").each(function(i){
                    input[$(this).attr("name")]=parseInt($(this).val());
                });
            }
            //если значение изменилось тогда берём разницу и прибавляем к другим
            $("input:text").change(function(){
                val_old=input[$(this).attr("name")];
                val_max=parseInt($(this).val())+1;
                name=$(this).attr("name")
                diff=parseInt($(this).val())-input[name];
                
                //заполняет пустые поля если надо
                $("input:text").each(function(i){
                    if($(this).val()==""){
                        $(this).val(val_max);
                        val_max+=1;
                    }
                });
                
                
                if(diff>0){
                    $("input:text").each(function(i){
                        if($(this).val()>val_old && $(this).attr("name")!=name){
                            $(this).val(parseInt($(this).val())+diff);
                        }
                    });
                }
                create();
            });
        });
        </script>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
    <body>
    
    <form action="" method="get">
        <input name="test1" type="text"><br>
        <input name="test2" type="text"><br>
        <input name="test3" type="text"><br>
        <input name="test4" type="text"><br>
        <input name="test5" type="text"><br>
        <input name="" type="submit">
    </form>
    
    </body>
    </html>
    
     
    notzevs нравится это.
Статус темы:
Закрыта.