2010-01-22 34 views
6

Tôi là một người rất mới để jquery và đang gặp khó khăn khi gọi nhiều hơn một thể hiện của một hàm.jquery - Làm thế nào để tôi gọi cùng chức năng với các thẻ id phần tử khác nhau?

tôi có một chức năng

$('#open_dialog').click(function(){ 
    $("#dialog").dialog("open"); 
     return false;  
}); 

Để gọi chức năng này tôi có một liên kết href với một cái tên id thẻ của open_dialog. Rõ ràng điều này làm việc tuyệt vời nếu nó là liên kết duy nhất trên trang tham chiếu hàm (mối quan hệ một đến một). Tuy nhiên, tôi muốn (Một mối quan hệ nhiều đến một).

Tôi có một bảng gồm 25 bản ghi và tôi yêu cầu mỗi bản ghi của tôi có liên kết gọi hàm open_dialog Tôi biết rằng tất cả các id không thể được gọi là open_dialog vì chúng phải là duy nhất, do đó làm cách nào để truy cập hàm trong khi truyền giá trị của một trong số 25 bản ghi của tôi là khởi tạo hàm.

Bằng cách này, hồ sơ của tôi là động vì vậy $ ('# open_dialog, open_dialog2, open_dialog3, ...') là không thực tế.

Cảm ơn bạn đã nhìn bài của tôi

Trả lời

11

thay vì sử dụng độc đáo của id bạn có thể sử dụng một lớp vào các mặt hàng của bạn sau đó chỉ cần sử dụng

$('.classname').click(function() 
{ 
    // 'this' would reference the anchor that was clicked 
    $("#dialog").dialog("open"); 
     return false;  
}); 

cũng có, bạn có thể thêm thuộc tính khác để neo, tức là

<a href="#" class="classname" record="14">Record 14</a> 

sau đó bên trong chức năng của bạn, bạn có thể có

var record = $(this).attr("record"); 

record bây giờ sẽ chứa 14.

+0

+1 - sắp gửi cùng một câu trả lời. – Buggabill

+0

Thaks John đó là một trợ giúp tuyệt vời chỉ có điều khác là làm thế nào để vượt qua một tham số cho chức năng ví dụ như nếu recordnumber 14 được nhấp tôi cần hàm open_dialog để biết nó đã được khởi tạo thông qua bản ghi 14 và không khác – Bazza

+1

Đề xuất của tôi sẽ là sử dụng id phần tử cho điều đó. Nếu bạn đang xây dựng trang động, mỗi phần tử có thể có một id duy nhất được chỉ định tại thời điểm chúng được tạo. Sau đó, bạn có thể sử dụng $ (this) .attr ("id") để tham chiếu đến id của phần tử đã được nhấp. – Buggabill

0

Bạn có thể sử dụng lớp thay vì id:

$('.open_dialog').click(function(){ 
    $('#dialog').dialog("open"); 
    return false; 
}); 
+0

tất cả phần tử có một lớp 'open_dialog' sẽ mở ra một hộp thoại. – Reigel

+0

Sẽ không hoạt động - $ (this) sẽ đề cập đến liên kết được nhấp vào, đó không phải là hộp thoại mà anh muốn mở. Bạn phải gọi .dialog trên ID chứa nội dung của hộp thoại, trong trường hợp '#dialog'. – Parrots

0

Bạn sẽ cho chúng ta một selector lớp thay vì một selector id.

Áp dụng cùng lớp với nhau liên kết của bạn ... cho phép nói 'openDialog'

<a class='openDialog' href='your link here'>Your text here</a> 

Trong jQuery sau đó bạn muốn thay đổi những gì bạn phải này ...

$('.openDialog').click(function(){ 
    $("#dialog").dialog("open"); 
    return false;  
}); 

Tôi đang nhầm lẫn với những gì bạn đang tham khảo với id "#dialog" mặc dù. Bạn đã không thực sự giải thích những gì đó là ở trên ... hoặc ít nhất tôi đã không nhận được nó nếu bạn đã làm.

Nếu có bất kỳ giá trị nào từ bản ghi mà bạn cần truyền vào hàm onclick, bạn có thể đặt id của mỗi thẻ neo (giả sử các giá trị này là duy nhất) là giá trị bạn cần vượt qua, sau đó tham khảo chúng trong chương trình như vậy ... (tôi đã lưu trữ id của liên kết trong một biến có tên rec_no dưới đây ...

$('.openDialog').click(function(){ 
    var rec_no = $(this).attr("id"); 

    $("#dialog").dialog("open"); 
    return false;  
}); 
0

Quên tất cả các class vô nghĩa này, mọi người khác đang nói về. Chỉ Nếu bạn nói rằng các liên kết của bạn nằm trong một bảng, bạn có thể nhận được tất cả các liên kết trong bảng như thế này ...

$("table a").click(function() { ... }); 

Hoặc nếu bảng của bạn có một ID vào nó ...

$("#tableId a").click(function() { ... }); 

Nhận id hồ sơ của bạn trong sự kiện click là quá dễ dàng. Phụ thuộc vào cột đó là trong. Điều này sẽ cảnh báo giá trị của cột đầu tiên trong bảng (trong trường hợp nhấp chuột) ...

var id = $(this).parent().siblings("td:eq(0)").text(); 
alert(id); 
0

Tôi giả định dialog chức năng cần phải biết được kỷ lục bạn' đề cập đến. Bạn sẽ cần xuất một số loại id cho bản ghi trong HTML của mình. Ví dụ.

<a class="open_dialog" id="record1"></a> 

Sau đó sửa đổi dialog chức năng để chấp nhận id của kỷ lục như một cuộc tranh cãi, và vượt qua nó trong như thế này:

$('.open_dialog').click(function(){ 
    $("#dialog").dialog("open", $(this).id); 
    return false; 
}); 

dialog một trong những chức năng của bạn, hoặc một cái gì đó tích hợp sẵn trong jQuery?

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