jquery ближайший tr и нахождение элемента

#jquery

#jquery

Вопрос:

У меня есть следующий код

 <form name="frm1">
<table id="mytable" border="1" cellspacing="2" cellpadding="2">
    <tr>
        <td>
            column1
        </td>
        <td>
            column2
        </td>
        <td>
            column3
        </td>
    </tr>
    <tr>
        <td>
            ABC
        </td>
        <td>
            <select name="mydd" class="mydd">
                <option value="ABC">ABC</option>
                <option value="DECF">DECF</option>
                <option value="GHHHH">GHHHH</option>
            </select>
        </td>
        <td>
            <input type="text" name="textvalue" id="textvalue" value="kljaslkjd">
        </td>
    </tr>
    <tr>
        <td>
            ABC
        </td>
        <td>
            <select name="mydd" class="mydd">
                <option value="222">222</option>
                <option value="333">333</option>
                <option value="444">444</option>
            </select>
        </td>
        <td>
            <input type="text" class="textvalue" name="textvalue" id="textvalue" value="kljaslkjd">
        </td>
    </tr>
</table>
</form>
  

код jquery, как показано ниже:

 $(document).ready(function(){
    $(".mydd").change(function(){
      var value= $(this).closest("tr").find(".textvalue").attr("name");
       alert('value:'   value);
    });
});
  

Что я пытаюсь сделать, так это то, что когда я меняю раскрывающийся параметр, я получаю ближайший tr, а затем нахожу для элемента ввода. Первый элемент всегда возвращает значение undefined. Но второй элемент работает нормально. В чем может быть причина?

Ответ №1:

В первом <input> отсутствует textvalue класс. Изменить

 <input type="text" name="textvalue" id="textvalue" value="kljaslkjd">
  

Для

 <input type="text" class="textvalue" name="textvalue" id="textvalue" value="kljaslkjd">
  

Разметка также содержит несколько элементов с повторяющимися идентификаторами, что является недопустимым HTML. Так что также измените первое id="textvalue" на id="textvalue1" , а второе на id="textvalue2" .

Ответ №2:

Дублированные идентификаторы — они будут получать вас каждый раз. Это может быть проблемой здесь. Во-вторых, у первого нет нужного класса — или a class, если на то пошло.

Ответ №3:

Я предлагаю вам всегда использовать оба варианта для ваших html-тегов (name, id), потому что у вас может быть два элемента с одинаковым именем, и в этом вообще нет проблем, но идентификатор должен быть уникальным, и идентификатор — это то, что важно для javascript, а имя важно для серверного языка, такого как PHP.

И входные теги, из которых вы запускаете это, не имеют класса textvalue , так что, возможно, в этом проблема.

Ответ №4:

У <input> в первой строке нет class="..." .
Следовательно .textvalue , не находит его.