如何获得相同的标签或以前的td内部标签类

时间:2016-05-05 08:34:41

标签: javascript jquery

我有以下html代码,如

<td>
    <input type='text' class='input_text' name='subject_text_".$i."[]' style ='height: 25px;'/>
</td> 
<td>
    <input type='file' id='file' class='input_file' name='subject_".$i."[]'/>
</td>

当我更改文件时,我需要将required属性添加到输入文本中。我试过但我没有实现它。我使用了以下代码:

function input_file(){
    var file_name = $(this).val();
    if (file_name !='') {
        alert('file is selected');
        var class_name = $(this).attr('class');
        var value = $('.' + class_name).prev('td input.class');
        $('.value').prop('required',true);
    } else {
        alert('file not selected');
    }
}

$(document).on('change', '.input_file', $(this), input_file);

2 个答案:

答案 0 :(得分:1)

find选择器在prev选择器参数内不起作用。以下是您需要做的事情:

1)您需要先遍历父母td。使用.closest('td').parent()

2)然后到它之前的兄弟td。使用.prev()

3)然后在其中找到所需的输入元素。使用.find('input.class')

function input_file(){
 var file_name =$(this).val();
 var inputclass =$(this)closest('td').prev('td').find(' input.class');
 if(file_name !=''){
      alert('file is selected');
      // code for file selected condition
      inputclass.prop('required',true);
  }else{
      alert('file not selected');
      // code for file not selected condition
      inputclass.prop('required',false);
  }
 }

答案 1 :(得分:1)

第一个问题是委托事件处理程序的语法不正确;该电话中应该没有$(this)。其次,您使用的DOM遍历并不完全正确。 td是文件输入的父级的兄弟,因此仅prev()不起作用。最后,只需将属性设置为是否选择了文件,即可缩短您使用的逻辑。试试这个:

function input_file() {
    $(this).closest('td').prev('td').find('input').prop('required', $(this).val() != '');
}

$(document).on('change', '.input_file', input_file);

Working example