Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.01.2015, 13:10
Интересующийся
Отправить личное сообщение для lok105 Посмотреть профиль Найти все сообщения от lok105
 
Регистрация: 05.01.2015
Сообщений: 14

запись val() в input
Чет с огромным скрипом поддается мне jquery )))
Есть таблица

<table id="table">
             <tr class = 'table_body'>
                 <td><input class='pole' type='text'/></td>
                 <td><input class='num1' type='text'/></td>
             </tr>
             <tr class = 'table_body'>
                 <td><input class='pole' type='text'/></td>
                 <td><input class='num1' type='text'/></td>
             </tr>
             <tr class = 'table_body'>
                 <td><input class='pole' type='text'/></td>
                 <td><input class='num1' type='text'/></td>
             </tr>
        </table>



и есть скрипт

$(function(){
   $("#table").on("change", ".table_body", function(){
       $(this).find(".pole").each(function(){
            var res = $(".pole").val();
               $('.num1').val(res);            
       });
   });
});


Смысл, что бы что пишешь в input pole отображалось в input num1.
Сейчас срабатывает только изменение в первом <tr> и меняет все input num1

Что я тут ни как понять не могу?
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 20.01.2015, 13:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Зачем each? Там одно pole всего.
Сообщение от lok105
$(".pole").val()
Это аналог document.querySelector('.pole').value - при этом querySelector вернет первое найденное .pole. То есть нет никакой привязки к конкретной "активной" строке таблицы. Подсказка:
$(this).find(".pole").val()
// или лучше переписать как
$('.pole', this).val()
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 20.01.2015, 13:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

lok105,

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
     $(function() {
    var pole = $(".pole"),
        num = $(".num1");
    pole.each(function(indx, el) {
        $(el).on("input", function() {
            num[indx].value = el.value
        })
    })
});
  </script>
</head>

<body>
<table id="table">
             <tr class = 'table_body'>
                 <td><input class='pole' type='text'/></td>
                 <td><input class='num1' type='text'/></td>
             </tr>
             <tr class = 'table_body'>
                 <td><input class='pole' type='text'/></td>
                 <td><input class='num1' type='text'/></td>
             </tr>
             <tr class = 'table_body'>
                 <td><input class='pole' type='text'/></td>
                 <td><input class='num1' type='text'/></td>
             </tr>
        </table>

</body>

</html>
Ответить с цитированием
  #4 (permalink)  
Старый 20.01.2015, 14:33
Интересующийся
Отправить личное сообщение для lok105 Посмотреть профиль Найти все сообщения от lok105
 
Регистрация: 05.01.2015
Сообщений: 14

Danik, в этом случае свою ошибку понял.
Но при этом раскладе так же при заполнении pole переписываются все input num1, а не только тот который напротив изменяемого pole. Я это и пытаюсь понять.
$(function(){
   $("#table").on("change", ".table_body", function(){
        var cost = $(this).find(".pole").val();
            $('.num1').val(cost);
   })
})


Рони, я наверное зря упростил скрипт для примера(не специально, просто что бы для себя раз и навсегда объяснить эту систему было понятнее)))).
1.pole заполняется автозаполнением, и первые буквы переносятся, а выбранное слово нет.
2.Скрипт не работает с подгружаемыми динамически.
<tr class = 'table_body'>
<td><input class='pole' type='text'/></td>
<td><input class='num1' type='text'/></td>
</tr>

В основном я себе голову сломал, что если через this обращаться к pole, num1 не является потомком pole, это потомок table_body. и как сделать, что бы изменения касались именно выбранных pole и num1 как их связать?

Последний раз редактировалось lok105, 20.01.2015 в 14:38.
Ответить с цитированием
  #5 (permalink)  
Старый 20.01.2015, 15:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от lok105
не только тот который напротив изменяемого pole
Я кажется объяснил причину этого, на примере pole. Неужели это так сложно для понимания?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 20.01.2015, 15:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от lok105
1.pole заполняется автозаполнением, и первые буквы переносятся, а выбранное слово нет.
ничего непонял
Сообщение от lok105
var cost = $(this).find(".pole").val();
тут нашёл
Сообщение от lok105
$('.num1').val(cost);
а тут почему не ищём?
Ответить с цитированием
  #7 (permalink)  
Старый 20.01.2015, 15:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от danik.js
// или лучше переписать как$('.pole', this).val()
сам так пишу, а шепчут find в этом случае быстрее - скажи что-нибудь?
Ответить с цитированием
  #8 (permalink)  
Старый 20.01.2015, 17:24
Интересующийся
Отправить личное сообщение для lok105 Посмотреть профиль Найти все сообщения от lok105
 
Регистрация: 05.01.2015
Сообщений: 14

$(function(){
	   $("#table").on("change", ".table_body", function(){
	        var cost = $(this).find(".pole").val();
	            $(this).find('.num1').val(cost);
	   })
});

да, так все работает. Просмотрел просто после того как убрал each this num1 находится в поле видимости .table_body
поэтому this и заработал

У меня вопрос был как быть если получение переменной pole происходит внутри функции.

т.е.
$(function(){
	   $("#table").on("change", ".table_body", function(){
	        $(this).find(".pole").autocomplete({
                     change: function(event, ui) {
                              var ID = ui.item.id; // Достаем значение 
                                                        // ключа после автозаполнения 
// Далее json запрос по ключу
                    $.ajax({
        	            url: "js/data.php",
        	            dataType: "json",
        	            type: "GET",
        	            data: {
        	               id: ID

                        },
                        success: function(data){
                        res = data; // Получаем вернувшуюся переменную со
                                        // значением, которое надо записать в num1
// И вот дальше засада...
//Значение переменной res за пределы функции не 
//выходит, а обратится к данному полю num1 внутри функции не получается, 
//распространяется на все num1 
//В этом и был вопрос как эту переменную передать правильно в свой num1
                        
                    $(".table_body").find(".num1").val(res);   // Вот тут засада                   
                       }

                    })
                                                               
                });

	   })
});


Еще раз прошу прощения, что упростил пример, видимо не правильно его упростил, впредь не буду ))

Последний раз редактировалось lok105, 20.01.2015 в 17:27.
Ответить с цитированием
  #9 (permalink)  
Старый 20.01.2015, 17:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

lok105,
сохранить this в строке 2
потом использовать в строке 25
Ответить с цитированием
  #10 (permalink)  
Старый 20.01.2015, 17:51
Интересующийся
Отправить личное сообщение для lok105 Посмотреть профиль Найти все сообщения от lok105
 
Регистрация: 05.01.2015
Сообщений: 14

Сорри, не понял про сохранить this в строке 2... куда там эту самую this впихнуть?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись значения в input files EvPut jQuery 1 22.07.2014 09:10
this input val() imediasun1 Элементы интерфейса 3 05.08.2013 15:54
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
Opera не выполняет style.fontSize=... в поле input Маэстро Opera, Safari и др. 6 20.06.2011 12:03
Разным элементам input - разное форматирование. Как? eclipse (X)HTML/CSS 1 25.10.2007 13:55