2012-07-03 48 views
5

Làm cách nào để thêm id vào hộp thoại cụ thể? Tôi chỉ muốn áp dụng phong cách riêng cho từng thoại và cố gắng làm việc đó như thế này:Giao diện người dùng JQuery thêm id vào hộp thoại

var $order_dialog = $("<%= escape_javascript(render('order_mini_site_form', :layout => false)) %>"); 

var current_dialog = $order_dialog.dialog({ 
    width: 515, 
    height: 575, 
    modal: true, 
    resizable: false, 
    draggable: false, 
    title: false, 
    autoOpen: true, 
    closeOnEscape: false, 
    buttons: [ 
    { text: "Отправить запрос" , click: function() { $(this).find('form').submit(); $(this).dialog('close'); } }, 
    { text: "Отмена", click: function() { $(this).dialog('close'); } } 
    ] 
}).parent().find('.ui-dialog-titlebar').remove(); 


$current_dialog.attr('id', 'awesome_dialog'); 

nhưng thoại tạo ra bên trong cơ thể mà không thẻ id và tôi không thể áp dụng phong cách cho nó.

Trả lời

7

Nếu mục tiêu của bạn chỉ là sử dụng id này trong css, bạn có thể đạt được điều này với một lớp css thay thế.

Tùy chọn dialogClass cho phép bạn chỉ định một lớp sẽ được áp dụng cho hộp thoại. Sau đó, bạn có thể sử dụng lớp này trong bộ chọn của mình để áp dụng một kiểu khác cho một hộp thoại cụ thể.

+1

tôi cố gắng lớp và nó làm việc cho tôi. Cảm ơn. Nhưng ID là tốt hơn trong quan điểm của tôi - nó có ưu tiên cao hơn so với bộ chọn lớp .. đó là lý do tại sao tôi đang tìm kiếm khả năng thêm ID. – Vladimir

+0

Vâng, nhưng vì API không cung cấp bất kỳ thứ gì cho ID, bạn phải sử dụng lớp học hoặc để hack. Nếu bạn hoàn toàn muốn có một ID, bạn có thể sử dụng hack sau đây (nhưng nó hơi bẩn). Ngay sau khi mở cửa sổ bật lên, bạn có thể xóa lớp và thêm id. $ (". your-class"). removeClass (". your-class"). attr ("id", "id của bạn"). Tuy nhiên, tôi nghĩ rằng "sự bẩn thỉu" gây ra bằng cách sử dụng một lớp học mà bạn muốn một ID đau ít hơn hack khủng khiếp này. Và bạn luôn có thể tăng mức ưu tiên cho quy tắc của mình bằng cách lặp lại toàn bộ quy tắc với lớp học –

1

Sự cố trong mã ví dụ của bạn là bạn đang thêm id vào kết quả của .find('.ui-dialog-titlebar').remove() thay vì chính hộp thoại. Sau đây sẽ làm việc cho bạn.

var $order_dialog = $("<%= escape_javascript(render('order_mini_site_form', :layout => false)) %>"); 

var current_dialog = $order_dialog.dialog({ 
    width: 515, 
    height: 575, 
    modal: true, 
    resizable: false, 
    draggable: false, 
    id: "ololo", 
    title: false, 
    autoOpen: true, 
    closeOnEscape: false, 
    buttons: [ 
    { text: "Отправить запрос" , click: function() { $(this).find('form').submit();    $(this).dialog('close'); } }, 
    { text: "Отмена", click: function() { $(this).dialog('close'); } } 
    ] 
}) 

$current_dialog.parent().find('.ui-dialog-titlebar').remove(); 
$current_dialog.attr('id', 'awesome_dialog'); 
+0

Và cách thực hiện chính xác như thế nào? – Vladimir

+0

Có rất nhiều tùy chọn. Cá nhân tôi sẽ bao gồm 'id' trong chính HTML, trong trường hợp của bạn trên' order_mini_site_form'. Bạn cũng có thể sử dụng một lớp CSS cho mỗi tùy chọn 'dialogClass' như một trình trả lời khác được đề cập. Là tùy chọn cuối cùng nếu bạn chỉ có một hộp thoại trên trang, bạn chỉ có thể sử dụng giao diện người dùng jQuery của lớp ui-dialog' đã được đặt trên hộp thoại. Ví dụ 'ui-dialog {color: yellow; } 'sẽ làm cho tất cả văn bản trên hộp thoại màu vàng. –

9

Một hơi muộn, nhưng đây là cách nó có thể được thực hiện:

$('#placeholderId').dialog('widget').attr('id', 'dialogId'); 

$ ('# placeholderId') thoại ('phụ tùng') mang đến cho bạn xung quanh <. div > của hộp thoại, rất có thể là phần tử bạn muốn đặt ID.

+1

Tôi tìm thấy nó INSANE rằng hộp thoại jquery không có tùy chọn để thêm một lớp/id cho phụ huynh. Ý tôi là, hoàn toàn điên rồ. Cũng điên là hộp thoại thực tế không có container (ngoại trừ các container bên ngoài) cho tiêu đề và nội dung div ... –

+0

Cách tốt nhất để làm điều này. –

0

Tôi không đồng ý với câu trả lời đã bỏ phiếu (không phải là tấn công cá nhân mà không đồng ý với phần "hack bẩn"). Đúng là không có tùy chọn ID cho Hộp thoại jquery, tuy nhiên bạn nên đi đến kết luận rằng một ID là cần thiết, mã sau đây là đủ. Hướng dẫn viên du lịch của tôi JS Tôi đang phát triển rất cần ID như vậy.

// Ở đây tôi đang tuyên bố nội dung tự động chèn [ví dụ như những gì tôi đang tạo] để có một ID của tempstep, điều này sẽ được sử dụng với các cuộc gọi dưới đây để thêm một ID cho jQuery Dialog Box

Code: jQuery ('<div id="tempstep"></div>').dialog({

Code: jQuery('#tempstep').parent().attr("id","dialogBox");

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