2010-05-10 27 views
14

Tôi có một khoảng thời gian đơn giản như vậydữ liệu Passing để một hàm jQuery nhấp chuột()

<span class="action removeAction">Remove</span> 

tuổi này nằm trong một bảng, mỗi hàng có một khoảng thời loại bỏ.

Và sau đó tôi gọi URL bằng AJAX khi nhấn vào khoảng đó. Sự kiện AJAX cần phải biết ID của đối tượng cho hàng đó? Cách tốt nhất để nhận ID đó vào hàm nhấp chuột là gì?

Tôi nghĩ tôi có thể làm một cái gì đó như thế này

<span class="action removeAction" id="1">Remove</span> 

Nhưng một ID không nên bắt đầu với một số? Đúng? Sau đó, tôi nghĩ rằng tôi có thể làm

<span class="action removeAction" id="my1">Remove</span> 

Sau đó chỉ cần bỏ phần 'của tôi' ra khỏi ID, nhưng điều đó có vẻ như là Yuk!

Dưới đây là sự kiện nhấp chuột của tôi và sự kiện AJAX của tôi ở đâu.

<script type="text/javascript" language="text/javascript"> 

$(document).ready(function() 
{ 

    $(".removeAction").click(function() 
    { 
     //AJAX here that needs to know the ID    
    } 
}); 

</script> 

Tôi chắc chắn có cách hay để làm việc này?

Lưu ý: Tôi không tìm kiếm

$(this).attr("id"); 

Tôi muốn để có thể vượt qua nhiều hơn một mẩu thông tin

Cảm ơn. Jake.

Trả lời

14

Nếu bạn nhấn mạnh vào việc sử dụng cổ học HTML hoặc XHTML 4,01:

$('.removeAction').click(function() { 
// Don’t do anything crazy like `$(this).attr('id')`. 
// You can get the `id` attribute value by simply accessing the property: 
this.id; 
// If you’re prefixing it with 'my' to validate as HTML 4.01, you can get just the ID like this: 
this.id.replace('my', ''); 
}); 

Bằng cách này, trong HTML5, the id attribute can start with a number or even be a number.

Sau đó, một lần nữa, nếu bạn đang sử dụng HTML5 dù sao, bạn có lẽ tốt hơn bằng cách sử dụng các thuộc tính dữ liệu tùy chỉnh, như vậy:

<span class="action removeAction" data-id="1">Remove</span> 
+0

Ah, thuộc tính tùy chỉnh là OK? Tôi nghĩ rằng họ là W3C xấu? –

+2

@jakenoble: Tại sao chúng lại là? Chúng tuyệt vời và rất hữu ích trong các trường hợp như của bạn: http://www.w3.org/TR/html5/dom.html#custom-data-attribute –

+0

Điều này rất hữu ích. Cảm ơn. Big ngón tay cái lên. –

3

$ (this) trong phạm vi chức năng nhấp chuột của bạn đại diện cho yếu tố nhấp

$(".removeAction").click(function() { 
    //AJAX here that needs to know the ID 
    alert($(this).attr('id'));   
} 
+0

Cảm ơn Tim. Đây không phải là những gì tôi đang tìm kiếm [sẽ sửa bài của tôi]. –

+0

Tại sao sử dụng '$ (this) .attr ('id')' thay vì 'this.id'? –

+0

Để giữ cho jQuery-Way :-) Tôi thực hiện điều này nghiêm ngặt để tránh các vấn đề có thể xảy ra với trình duyệt x ... – Flatlin3

0

Bạn có thể thử jQuery.data(): http://api.jquery.com/jQuery.data, nhưng điều đó sẽ có nghĩa là server-side code tạo js để thực hiện khi tải trang để bạn có thể lưu trữ các id để tái sử dụng sau đó (hành động loại bỏ của bạn)

// this part would have to be server 'generated' 
// and by that I'm referring to the '<?=$row_id?>' 
$('table .remove').each(function(){ 

    var MyElem = $(this); 
    MyElem.data('id', <?=$row_id?>); 

    MyElem.click(function(){ 
     the_id = $(this).data('id'); 
     // ajax call goes here 
    }); 

}); 
+0

Điều này thật thú vị - * dấu để đọc sau * –

1

Đoạn mã dưới đây sẽ giúp bạn có được ID của nhấp span. Sử dụng ID không hoàn hảo, nhưng nó sẽ hoạt động.

$(".removeAction").click(function() { 
    alert($(this).attr("id")); 
}); 
+0

Cảm ơn Glen. Đây không phải là những gì tôi đang tìm kiếm [sẽ sửa bài của tôi]. –

+0

Tại sao sử dụng '$ (this) .attr ('id')' thay vì 'this.id'? –

+0

Không biết rằng 'this.id' này giống nhau - * đẹp * –

1

Bạn có thể có một lĩnh vực ẩn trên mỗi hàng mà các cửa hàng ID và/hoặc các dữ liệu cần thiết khác trong đối tượng JSON & sử dụng dữ liệu đó thay vì hack xung quanh bằng thẻ span.

<tr> 
<td> 
<span class="action removeAction">Remove</span> 
<input type="hidden" value="1" /> 
</td> 
</tr> 

$('.removeAction').click(function(){ 
    var id = $(this).next().val(); 
    // do something... 
}); 

HTH

+0

Cảm ơn. Không nghĩ về điều đó. Hơi * chunky * Tôi cảm thấy và không thanh lịch như các thuộc tính tùy chỉnh. –

+1

@jakenuble - Tôi đồng ý với độ "chunky" -ness của giải pháp. Trang có thể không xác thực cho xHTML với các thuộc tính tùy chỉnh ... – Sunny

+1

@jakenoble - đây là một nơi tốt để xem một số đối số cho/chống lại các thuộc tính tùy chỉnh: http://stackoverflow.com/questions/994856/so-what-if- custom-html-attributes-arent-valid-xhtml – Sunny

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