Nút tắt trong jQuery


359

Trang của tôi tạo ra nhiều nút như id = 'rbutton_"+i+"'. Dưới đây là mã của tôi:

<button type='button' id = 'rbutton_"+i+"' onclick=disable(i);>Click me</button>

Trong Javascript

function disable(i){
    $("#rbutton'+i+'").attr("disabled","disabled");
}

Nhưng nó không vô hiệu hóa nút của tôi khi tôi nhấp vào nó.


6
'rbutton _ "+ i +"' không phải là ID hợp lệ.
Diodeus - James MacFarlane

Làm thế nào tôi có thể chỉ định id. Nó được tạo trong javascript của tôi trong vòng lặp for.
dùng2047817

Làm thế nào về việc tạo một jsFiddle để chúng ta có thể thấy những gì bạn đang làm?
j08691

5
Bạn có thể muốn disable(this)function disable(elem) { $(elem).attr("disabled","disabled") }
JJJ

2
jQuery có thể giải quyết các phần tử bằng cách sử dụng số chỉ mục của chúng, vì vậy nếu bạn làm đúng, bạn thậm chí có thể không cần ID. Bạn có thể vượt qua vô hiệu hóa (điều này) như một tự tham khảo.
Diodeus - James MacFarlane

Câu trả lời:


638

Sử dụng .propthay thế (và dọn sạch chuỗi chọn của bạn):

function disable(i){
    $("#rbutton_"+i).prop("disabled",true);
}

HTML được tạo:

<button id="rbutton_1" onclick="disable(1)">Click me</button>
<!-- wrap your onclick in quotes -->

Nhưng cách tiếp cận "thực tiễn tốt nhất" là sử dụng ràng buộc sự kiện JavaScript và thisthay vào đó:

$('.rbutton').on('click',function() {
    $(this).prop("disabled",true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button class="rbutton">Click me</button>

http://jsfiddle.net/mblase75/2Nfu4/


Đây là một fiddle nhỏ tôi tạo ra. Xin vui lòng cho tôi biết những gì tôi đang làm sai. jsfiddle.net/2Nfu4/3
dùng2047817

ĐỒNG Ý. Nó hoạt động trong No Wrap - trong Head..Nhưng tôi có thể hỏi tại sao không? Có thể đây là một cái gì đó tương tự, tôi không làm điều này trong mã thực tế của mình !!
dùng2047817

Giống như cách jsFiddle đã thiết lập, có vẻ như - bạn có thể "kiểm tra phần tử" trong trình duyệt của mình nếu bạn muốn phân tích chính xác những gì đang xảy ra.
Blazemonger

1
Điều này hoạt động tốt. Chỉ cần đảm bảo rằng nếu bạn đang sử dụng ajax, bạn kích hoạt nút trong các trường hợp thành công và lỗi. Không phải là kết thúc cuộc gọi ajax. Bởi vì sau đó nó sẽ ngay lập tức được kích hoạt và bạn sẽ không thấy vô hiệu hóa gì cả.
dùng89032

Với jQuery 1.10.2, nó hoạt động trong IE 11, nhưng không hoạt động trong Chrome Phiên bản 39.0.2171.95 m. Nghi ngờ, fiddle được sử dụng cho câu trả lời này không cung cấp jQuery 1.10.2
Alex

35

Hãy thử mã này:
HTML

<button type='button' id = 'rbutton_'+i onclick="disable(i)">Click me</button>

chức năng

function disable(i){
    $("#rbutton_"+i).attr("disabled","disabled");
}

Giải pháp khác với jquery

$('button').click(function(){ 
    $(this).attr("disabled","disabled");
});

BẢN GIỚI THIỆU


Giải pháp khác với javascript thuần

<button type='button' id = 'rbutton_1' onclick="disable(1)">Click me</button>

<script>
function disable(i){
 document.getElementById("rbutton_"+i).setAttribute("disabled","disabled");
}
</script>

DEMO2


Hàm .click () thứ hai hoạt động hoàn hảo trong bản demo của bạn. Nhưng tôi đã sử dụng phương pháp riêng biệt như được đề cập trong giải pháp đầu tiên của bạn nhưng nó không hoạt động. Bạn có thể vui lòng giúp đỡ !!
dùng2047817

Đã thêm giải pháp thứ ba với javascript thuần @ user2047817
Alessandro Minoccheri

29

Có hai điều ở đây, và câu trả lời được bình chọn cao nhất là đúng về mặt kỹ thuật theo câu hỏi của OP.

Tóm tắt ngắn gọn là:

$("some sort of selector").prop("disabled", true | false);

Tuy nhiên, nếu bạn đang sử dụng Giao diện người dùng jQuery (tôi biết OP không có nhưng một số người có thể đến đây) thì trong khi điều này sẽ vô hiệu hóa các nút bấm sự kiện, nó sẽ không làm cho nút xuất hiện bị vô hiệu hóa theo kiểu UI.

Nếu bạn đang sử dụng nút theo kiểu UI UI thì nó sẽ được bật / tắt thông qua:

$("some sort of selector").button("enable" | "disable");

http://api.jqueryui.com/button/#method-disable


27

Đây là cách đơn giản nhất theo ý kiến ​​của tôi:

// All buttons where id contains 'rbutton_'
const $buttons = $("button[id*='rbutton_']");

//Selected button onclick
$buttons.click(function() {
    $(this).prop('disabled', true); //disable clicked button
});

//Enable button onclick
$('#enable').click(() =>
    $buttons.prop('disabled', false) //enable all buttons
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="rbutton_200">click</button>
<button id="rbutton_201">click</button>
<button id="rbutton_202">click</button>
<button id="rbutton_203">click</button>
<button id="rbutton_204">click</button>
<button id="rbutton_205">click</button>
<button id="enable">enable</button>


1
Rất tốt thưa ngài. Điều này hoàn toàn hiệu quả. Có các nút bootstrap.
steve moretz

25

Thử cái này

function disable(i){
    $("#rbutton_"+i).attr("disabled",true);
}

15

nút vô hiệu hóa:

$('#button_id').attr('disabled','disabled');

nút bật:

$('#button_id').removeAttr('disabled');

13

Đơn giản là nó hoạt động tốt, trong HTML:

<button type="button" id="btn_CommitAll"class="btn_CommitAll">save</button>

Trong phần JQuery, đặt chức năng này cho nút vô hiệu hóa:

function disableButton() {
    $('.btn_CommitAll').prop("disabled", true);
}

Đối với nút kích hoạt:

function enableButton() {
    $('.btn_CommitAll').prop("disabled", false);
}

Đó là tất cả.


3

Đây là cách bạn làm điều đó với ajax.

$("#updatebtn").click(function () {
    $("#updatebtn").prop("disabled", true);
    urlToHandler = 'update.ashx';
            jsonData = data;
            $.ajax({
                url: urlToHandler,
                data: jsonData,
                dataType: 'json',
                type: 'POST',
                contentType: 'application/json',
                success: function (data) {
                    $("#lbl").html(data.response);
                    $("#updatebtn").prop("disabled", false);
                    //setAutocompleteData(data.response);
                },
                error: function (data, status, jqXHR) {
                    alert('There was an error.');
                    $("#updatebtn").prop("disabled", false);
                }
            }); // end $.ajax

trong một số phiên bản của jQuery, bạn phải sử dụng .attr('disabled', true). Tôi không biết phiên bản nào, nhưng phiên bản tôi phải sử dụng (được rút gọn và đóng gói như một phần của ứng dụng tôi đang làm việc) xuất hiện cùng vớiobject does not support prop
JoeBrockhaus

2

Điều này làm việc cho tôi:

<script type="text/javascript">
function change(){
    document.getElementById("submit").disabled = false;
}
</script>

2

Tôi muốn tắt nút trên một số điều kiện, tôi đang sử dụng giải pháp thứ nhất nhưng nó không hoạt động với tôi. Nhưng khi tôi sử dụng cái thứ 2 thì nó hoạt động. Hiện tại là kết quả đầu ra từ bảng điều khiển trình duyệt.

1. $ ('# psl2 .btn-continue'). Prop ("bị vô hiệu hóa", đúng)

<a class=​"btn btn-yellow btn-continue" href=​"#">​Next​</a>

2. $ ('# psl2 .btn-continue'). Attr ("bị vô hiệu hóa", "bị vô hiệu hóa")

<a class=​"btn btn-yellow btn-continue" href=​"#" disabled=​"disabled">​Next​</a>

0

Đối với các nút Jquery UI, công việc này:

$("#buttonId").button( "option", "disabled", true | false );
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.