2011-11-05 71 views
11

tôi có như sau:Làm cách nào để thêm hàng bảng html phụ khi nhấp vào nút bằng jQuery?

<table> 
    <tr><td>author's first name</td><td>author's last name</td></tr> 
    <tr><td><input type='text' name='first_name' /></td><td><input type='text' name='last_name' /></td></tr> 
</table> 
<a href='' onclick='return false;'>Add Author</a> 

và mỗi khi tôi nhấp vào thẻ liên kết để 'thêm tác giả', tôi muốn tạo ra một dòng của bảng phụ như sau:

<tr><td><input type='text' name='first_name2' /></td><td><input type='text' name='last_name2'</td></tr> 

Tôi nhìn .append() và tôi không chắc chắn chính xác cách sử dụng nó cho tình huống của mình. Và tôi muốn có thể thêm vô số các hàng trong bảng mới. Làm thế nào để tôi làm điều này?

+0

xem http://stackoverflow.com/questions/171027/add-table-row-in-jquery –

Trả lời

14

Thứ nhất, sửa HTML của bạn như:

<table class="authors-list"> 
    <tr> 
     <td>author's first name</td><td>author's last name</td> 
    </tr> 
    <tr> 
     <td> 
      <input type="text" name="first_name" /> 
     </td> 
     <td> 
      <input type="text" name="last_name" /> 
     </td> 
    </tr> 
</table> 
<a href="#" title="" class="add-author">Add Author</a> 

(Tôi đã thêm indents chỉ cho tầm nhìn) và không sử dụng inline Javascript. Ngoài ra, nhất quán, tốt nhất là sử dụng " (dấu ngoặc kép) cho thuộc tính HTML, ' (dấu nháy đơn) cho chuỗi JavaScript.

Thứ hai, làm một cái gì đó như thế:

jQuery(function(){ 
    var counter = 1; 
    jQuery('a.add-author').click(function(event){ 
     event.preventDefault(); 

     var newRow = jQuery('<tr><td><input type="text" name="first_name' + 
      counter + '"/></td><td><input type="text" name="last_name' + 
      counter + '"/></td></tr>'); 
      counter++; 
     jQuery('table.authors-list').append(newRow); 

    }); 
}); 

Nó sẽ thêm một hàng vào bảng với mỗi nhấp chuột vào liên kết có lớp add-author (chỉ để đảm bảo không có liên kết khác được influented), incrementing số tại cuối tên của mỗi trường được chèn vào bởi 1. Hàng sẽ được chèn vào cuối bảng có lớp authors-list (cùng một lý do như với lớp cho một liên kết). Xem this jsfiddle làm bằng chứng.

+0

Tôi sử dụng dấu nháy đơn nhiều nhất có thể vì nó là một phím tắt trong tất cả các mã mà tôi viết, nhưng nếu bạn đủ tốt để cho tôi một lý do cụ thể tại sao tôi nên sử dụng dấu ngoặc kép và đơn như bạn đã đề cập , Tôi rất thích thay đổi tùy chọn mã hóa của mình. Tôi vẫn còn mới với thế giới mã hóa (chỉ được học toàn thời gian trong khoảng 8 tháng của php) và rất vui khi có bất kỳ lời khuyên tốt nào. –

+1

@Qlidnaque: Chỉ cần nhất quán và sử dụng các loại trích dẫn khác nhau (khác nhau đối với JavaScript và khác nhau đối với HTML/CSS, vì vậy bạn sẽ giảm thiểu cơ hội mắc lỗi).Trong trường hợp ** PHP ** nó quan trọng hơn, bởi vì khi bạn sử dụng dấu ngoặc kép cho các chuỗi không chứa bất kỳ biến nào, bạn có thể vô tình tìm thấy chính mình trong một tình huống mà một số lỗi xuất hiện và bạn không thể tìm thấy nó nhanh chóng. Trong trường hợp ** JavaScript **, điều này là nhiều hơn về việc chọn tiêu chuẩn mã hóa. Tôi cố gắng tuân theo [tiêu chuẩn mã hóa của MooTools] (https://github.com/mootools/mootools-core/wiki/syntax-and-coding-style-conventions). – Tadeck

+0

@Tadeck làm cách nào tôi có thể hiển thị dữ liệu động trong hàng trong bảng đến từ php? chẳng hạn như tôi có các hộp chọn trong tất cả các tds và có dữ liệu đến từ db chẳng hạn như quốc gia, chuyên môn của bác sĩ thêm. Cảm ơn trước. –

3

Hãy khám phá here.

Có thể bạn sẽ muốn tăng số trong thuộc tính tên trong mỗi lần lặp.

0

Hãy cho một id để bàn của bạn, giả sử my_table và id để neo một my_button giả sử sau đó thử dưới đây:

mã sửa đổi của bạn:

<table id="my_table"> 
<tr><td>author's first name</td><td>author's last name</td></tr> 
<tr><td><input type='text' name='first_name' /></td><td><input type='text' name='last_name' /></td></tr> 
</table> 
<a id="my_button" href='#'>Add Author</a> 

Và thêm đoạn mã dưới đây sau bao gồm cả thư viện jquery trong trang của bạn.

$(document).ready(function() 
{ 
    new_row="<tr><td><input type='text' name='first_name2' /></td><td><input type='text' name='last_name2'</td></tr>"; 
    $("#my_button").click(function() 
    {  
    $("#my_table").append(new_row); 
    return false; 

    } 
} 
+0

-1 vì không sử dụng 'var' cho các biến mới được tạo. Nó sẽ làm cho chúng toàn cầu và gây ô nhiễm không gian tên toàn cầu. Lý do thứ hai là không phù hợp về dấu ngoặc kép trong HTML. Lý do thứ ba sẽ không sử dụng [event.preventDefault()] (http://api.jquery.com/event.preventDefault/) (điều này sẽ làm tăng khả năng sử dụng mã), nhưng tôi không thể cho -3 thay vì -1. Lấy làm tiếc. – Tadeck

+0

Có bạn đúng. Tôi chỉ cung cấp giải pháp tối thiểu để tạo hàng mới bằng cách sử dụng mã html của anh ấy. Nó sẽ là vấn đề để có được các giá trị từ các phần tử mới được tạo ra của anh ta, nhưng khi anh ta đề cập đến anh ta muốn tạo ra các hàng INFINITE, nó dường như chỉ quan tâm đến việc thử nghiệm. Dù sao, mã của bạn là một giải pháp thiết thực. Cảm ơn ! –

Các vấn đề liên quan