我有以下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);
答案 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);