2016-01-27 88 views
2

我嘗試了幾個小時,但找不到任何解決方案。按類別獲取值

簡化我的代碼如下所示。

PHP:

foreach($db->query("SELECT id FROM news ORDER BY position ASC") as $row) 
    { 
    ... 
    <input type="text" class="_title" > 
    Search: <input type="file" class="_file" >  
    <input type='button' class="_submit" value='Save' > 
    ... 
    } 
?> 

JS:

$(document).ready(function(){ 
    $("._submit").click(function(){ 

     ?? var _title = document.getElementById('_title'), 
     ?? _file = document.getElementById('_file'); 

     var data = new FormData(); 
     data.append('SelectedFile', _file.files[0]); 
     data.append('title', _title.value); 
     ... 
</script> 

我不知道如何通過類來獲取數據。通過ID它工作,但我不能使用ID,因爲會有幾個相同的ID,因爲foreach循環。

嘗試這個也沒有成功:

var _file = document.getElementsByClassName('_file'); 

我希望有人能幫助我。 米施

+1

你'php'所做的一樣,使用循環:)你可能並不需要很多'submit'按鈕,我想.. – Rayon

+0

'因爲foreach循環,會有幾個相同的ID。「請注意,在文檔中重複的'id'將意味着您的HTML無效並可能導致無法預料的問題。 –

回答

3

你可以用容器的div元素的像

<?php 
foreach($db->query("SELECT id FROM news ORDER BY position ASC") as $row) 
    { 
    ... 
    <div class='container'> 
    <input type="text" class="_title" > 
    Search: <input type="file" class="_file" >  
    <input type='button' class="_submit" value='Save' > 
    </div> 
    } 
?> 

然後使用.closest()向上遍歷容器。在病房之後,您只需使用find即可獲得所需的元素。你可以做一點相同@satpal

<script> 
$(document).ready(function(){ 
    $("._submit").click(function(){ 
     var container = $(this).closest('.container'); 
     var _title = container.find('._title'), 
     var _file = container.find('._file')[0]; 

     var data = new FormData(); 
     data.append('SelectedFile', _file.files[0]); 
     data.append('title', _title.value); 
     //Rest of your code 
    }); 
}); 
</script> 
+1

好的答案 - 雖然jQuery對象沒有'files'數組,所以你需要'_file [0] .files [0]' –

+0

@RoryMcCrossan請檢查我的答案。 –

+0

@ZakariaAcharki你的答案將所有可用的輸入放在'FormData'中,而不僅僅是那些與用戶點擊的提交按鈕相關的輸入 - 我相信這是OP的意圖。 –

1

由於您使用jQuery的你可以用相同的類通過所有的元素使用.each()函數和類選擇.循環:

$('.class').each(function(){ 
    var input_value = $(this).val(); 
}) 

既然你有一個以上的場_title類並_file你應該通過他們作爲陣列Formdata()使用陣列標誌[]

var data = new FormData(); 

$('._file').each(function(){ 
    var _file = $(this).val(); 
    data.append('SelectedFile[]', _file.files[0]); 
}) 

$('._title').each(function(){ 
    var _title = $(this).val(); 
    data.append('title[]', _title); 
}) 

希望這會有所幫助。

0

一件事裹在一個div元素代碼。

PHP:

foreach($db->query("SELECT id FROM news ORDER BY position ASC") as $row) { ... <div> <!-- wrapper --> <input type="text" class="_title" > Search: <input type="file" class="_file" >
<input type='button' class="_submit" value='Save' > </div> } ?>

那就試試下面的代碼。

JS:

$("._submit").click(function(){ 

    var title = $(this).siblings('._title').val(); 
    var file = $(this).siblings('._file')[0].files[0]; 

    var data = new FormData(); 
    data.append('SelectedFile',file); 
    data.append('title', title); 
}); 

上面的代碼利用.siblings()功能