2016-05-05 87 views
2

有像我如何獲得相同的標籤或前面的TD內標籤類

<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> 

下面的HTML代碼當我改變我需要將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

'.value'不會出現在'html'? – guest271314

+0

其實我沒有上課的價值,爲什麼我只是添加這一行 – dev

回答

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

+0

感謝@rory它的工作對我和我的委託語法工作無需刪除$(this) – dev

+0

它的工作原理,但你通過'$(this)在'data'參數中,你不需要這樣做。這只是創建一個沒有理由的jQuery對象。無論哪種方式,很高興它幫助:) –

+0

謝謝你的一個線路解決方案 – dev

1

找到選擇器不會在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); 
    } 
} 
相關問題