Нужна альтернатива getElementById для обновления текстового поля с помощью события select onchange

#javascript

Вопрос:

Я создаю массив элементов формы, копируя поле в Javascript. Я не мог использовать идентификаторы, потому что поля генерируются системой.

Что мне нужно, так это способ скопировать выделенный текст из выпадающего списка и вставить его в следующий input box .

Мой Макет:

  (row 1) SELECT | INPUT
 (row 2) SELECT | INPUT
 (row 3) SELECT | INPUT
 
 function updateField(e){    
    var selectElement = e.target.value;
    alert(selectElement); 
    // Got it! works fine
    //If I use an id on the input field, it is the same for ALL <tr>'s. 
    //The following line works almost. But it puts it in the top TR only.
    //That over writes what was there from the TR above.
    document.getElementById("SomeID").value = selectElement;   
    //not gonna work for me  
} 
 <table>
 <tr>   
   <td>
     <select onchange='updateField(event);' name="tom">
        <option value="one">one</option>
        <option value="two">two</option>
     </select>
   </td>
   <td>
     <input name="sue" value="aaa" />
   </td>
 </tr>

 <tr>
   <td>
     <select onchange='updateField(event);' name="tom">
        <option value="one">one</option>
        <option value="two">two</option>
     </select>
   </td>
   <td>
     <input name="sue" value="bbb" />
   </td>
 </tr>
</table> 

Мне нужно записать select box значение и поместить его в поле ввода
того же значения <tr> .

Что мне нужно, так это способ передать полученную информацию в следующее поле формы ( input box ) без использования каких-либо id или class или подобных вещей. Просто просто передайте этот результат в следующее поле формы в следующем td . И это не может иметь id никакого td отношения к , tr , select , или input . Наверняка есть способ захватить следующий элемент управления, не указывая его конкретно??

Когда я вручную вводлю разные сообщения в поля ввода (все они имеют одно и то же имя), я получаю в своем посте именно то, что хочу form !

Результаты публикации PHP:

  $myNumbers = $_POST['sue']; 
 count("$myNumbers") = 1;
 $myNumbers[0] = "aaa";
 $myNumbers[1] = "bbb";
 

Но я не хочу "aaa" или "bbb" (набрано в долинах). Я хочу, чтобы предметы
были выбраны для конкретного rows человека .

Спасибо за вашу помощь! 🙂

Ответ №1:

Все, что вы хотите сделать, это пересечь дерево DOM от вашего <select> элемента, пока вы не доберетесь до своего <input> .

Один из способов сделать это — использовать метод closest() DOM для получения родителя <td> или родителя <tr> . Оттуда вы можете найти родного брата <td> с помощью nextElementSibling , а затем ввод оттуда или найти ввод от родителя <tr> с помощью querySelector()

 var selectElememt = e.target;
var parentTD = selectElement.closest('td');
var siblingTD = parentTD.nextElementSibling;
var inputElement = siblingTD.querySelector('input');
inputElement.value = selectElement.value;

//using parent tr instead
var selectElememt = e.target;
var parentTR = selectElement.closest('tr');
var inputElement = parentTR.querySelector('input');
inputElement.value = selectElement.value;
 

Если ваша структура в конечном итоге изменится или изменится, например, вы добавите еще <td> один или несколько входных элементов, вам нужно будет изменить способ пересечения дерева DOM, чтобы получить желаемый ввод.

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

1. Спасибо тебе, Патрик! Это работает как заклинание! Я далеко от того места, куда мне нужно идти. Но это наставляет меня на правильный путь! 🙂