2011-07-29 17 views
8

Nhu cầu của tôi: Tôi đang sử dụng hộp thoại chế độ jquery. Tôi có một số nút trên đó. Tôi muốn vô hiệu hóa một nút khi hộp thoại Mở ra nhưng muốn bật nó sau một số thao tác cụ thể.cách vô hiệu hóa các nút hộp thoại jquery

Tôi đã làm gì: Tôi có thể tắt nút bằng cách thêm tuyên bố này jQuery(".ui-dialog-buttonpane button:contains('Issue')").attr("disabled", true).addClass("ui-state-disabled");.

Vấn đề: Nhưng bây giờ điều tôi muốn là khi nhấn nút chỉnh sửa, tôi thực hiện một số hành động, sau khi thực hiện hành động đó, nút 'Vấn đề' sẽ được bật.

Mã của tôi ở bên dưới.

jQuery(newdiv).dialog({ 
    width:500, 
    height:275, 
    dialogClass:'alert', 
    modal: true, 
    close: function(event, ui) { jQuery(newdiv).html(''); }, 
    buttons: { 
     "issue":function() 
     { 

     }, 
     "Edit":function() 
     { 
      //here I am opening a new dialogue. When this child dialog is closed I want the `issue` button of parent dialogue to enablee.I have used this statement 
      jQuery(this).find(".ui-dialog-buttonset button:contains('Issue')").removeAttr("disabled").removeClass("ui-state-disabled").addClass('ui-state-default'); 
     }, 
     "Cancel":function(){jQuery(this).dialog('close');}, 
    } 
}); 
jQuery(".ui-dialog-titlebar").hide(); 
jQuery(".ui-widget-content").css({'background':'none','background-color':'#FFFFFF'}); 
jQuery(".ui-dialog-buttonpane button:contains('Issue')").attr("disabled", true).addClass("ui-state-disabled"); 
+0

chỉ cần thiết lập thuộc tính false vào chỉnh sửa của nhấp chuột ... bạn đã làm điều đó? – abhijit

+0

yup nhưng không có kết quả –

+0

Không, bạn phải loại bỏ các thuộc tính vô hiệu hóa để kích hoạt một cái gì đó, precence duy nhất của thuộc tính vô hiệu hóa một đầu vào –

Trả lời

20

Không cần phải bận tâm với các lớp học trên các nút và nó có lẽ không phải là một ý tưởng hay. Các nút trong một hộp thoại jQuery-UI là jQuery-UI buttons và họ hỗ trợ disableenable phương pháp theo phong cách jQuery-UI thông thường:

$button.button('enable'); // Enable the button 
$button.button('disable'); // Disable the button 

Trước hết, thay thế này:

jQuery(".ui-dialog-buttonpane button:contains('Issue')").attr("disabled", true).addClass("ui-state-disabled"); 

Với điều này :

jQuery('.ui-dialog button:nth-child(1)').button('disable'); 

Sau đó, trong trình xử lý chỉnh sửa của bạn, hãy làm điều này:

jQuery('.ui-dialog button:nth-child(1)').button('enable'); 

Để bật nút.

Theo như các bộ chọn đi, hộp thoại chính <div> có lớp ui-dialog để chúng tôi bắt đầu với .ui-dialog. Sau đó, chúng tôi muốn các nút bên trong hộp thoại vì vậy chúng tôi đang tìm kiếm các yếu tố <button>; điều này cho chúng ta .ui-dialog button. Các nút trong hộp thoại được liệt kê từ trái sang phải theo thứ tự như trong tùy chọn buttons đối với hộp thoại.Có nhiều cách khác nhau để có được nút đầu tiên:

tôi đã đi với :nth-child mà là một selector CSS3:

Các :nth-child(an+b) giả ký hiệu-lớp đại diện cho một phần tử h là an+b-1 anh chị em trước trong cây tài liệu, cho bất kỳ số nguyên dương hoặc giá trị bằng không nào là n và có phần tử gốc.

Vì vậy, button:nth-child(1) là nút đầu tiên. Tôi nghĩ rằng nếu bạn đang làm việc với một nút, bạn có thể sẽ làm mọi thứ với các nút khác, ví dụ: bạn có thể làm .ui-dialog button:nth-child(2) để nhận nút "Chỉnh sửa" và nút đó sẽ phù hợp với bộ chọn được sử dụng cho nút "Sự cố".

+0

Strange dude. Nó hoạt động. Nhưng tôi không thể hiểu được điều này. Bạn có muốn giải thích thêm một chút về cách bạn đã làm điều này. Làm thế nào 'jQuery ('. ui-hộp thoại nút: nth-con (1)'' tìm thấy nút cụ thể? –

+0

@Awais: Xin vui lòng xem bản cập nhật của tôi –

+0

Dude này là tuyệt vời.Tất cả hiểu rằng. –

1

Bạn có thể làm:

"Edit":function() 
    { 
     //perform other actions 
     jQuery(".ui-dialog-buttonset button:contains('Issue')").removeAttr("disabled").removeClass("ui-state-disabled").addClass('ui-state-default'); 
    }, 

Hãy nhớ rằng, một yếu tố đầu vào với các thuộc tính vô hiệu hóa luôn bị vô hiệu hóa, bất kể giá trị mà bạn thiết lập các thuộc tính để: $('input').attr('disabled', false) bằng $('input').attr('disabled', 'disabled')

+0

Cảm ơn bạn đã trả lời. Thực ra tôi đang mở một hộp thoại mới trên nút chỉnh sửa. Khi đối thoại mới đóng, tôi muốn kích hoạt nút 'issue' của hộp thoại phụ huynh. Tôi cũng đã chỉnh sửa câu hỏi của mình. –

+0

Chỉ có một nút được gọi là vấn đề? Nếu vậy hãy xem cách tôi chỉnh sửa câu trả lời của tôi –

+0

Có nó là duy nhất –

1
"Edit":function() 
     { 
     jQuery(".ui-dialog-buttonpane button:contains('Issue')") 
      .removeAttr("disabled") 
      .removeClass("ui-state-disabled") 
      .addClass('ui-state-default'); 

     } 
0

nếu bạn có hộp thoại khác trong ngữ cảnh, theo cách này jQuery('.ui-dialog button:nth-child(1)').button('disable'); có thể gây ra một số sự cố.

có một vài bước để cải thiện điều này: 1: tìm ra xử lý thoại

$mydialog = $("#divfordialog"); 

2: tìm bảng điều khiển nút

$buttonPanel = $mydialog.siblings(".ui-dialog-buttonpane"); 

3: tìm nút mục tiêu, giả sử nút của tên là BTN

$buttonwanttocontrol = $buttonPanel.find('button:contains("BTN")'); 

cuối cùng: xử lý nó (ví dụ: tắt, bật);

$buttonwanttocontrol.button("disable"); 
$buttonwanttocontrol.button("enable"); 

offently, chúng tôi muốn init tình trạng nút thoại của chúng tôi khi nó mở, điều này sẽ làm việc tìm:

$("divfordialog").dialog({ 
    ... 
    buttons : { 
     ... 
     "BTN" : function() {}, 
     ... 
    }, 
    open : function() { 
     if (shouldDisableBtn()) { 
      $(this).siblings(".ui-dialog-buttonpane").find('button:contains("BTN")').button("disable") 
     } 
    } 
    ... 
});