2010-06-09 30 views
21

tôi có chức năng này Toggles thuộc tính tàn tật tạo thành một lĩnh vực đầu vào:.attr ("tàn tật", "tàn tật") vấn đề

$('.someElement').click(function(){  
    if (someCondition) { 
    console.log($target.prev('input')) // gives out the right object 
    $target.toggleClass('open').prev('input').attr('disabled', 'disabled'); 
    }else{ 
    $target.toggleClass('open').prev('input').removeAttr('disabled'); //this works 
    } 
}) 

các removeAttr hoạt động tốt nhưng khi tôi cần thêm người tàn tật một lần nữa nó không có gì. Console.log của tôi được kích hoạt (và cho tôi quay lại trường nhập đúng) vì vậy tôi chắc chắn rằng câu lệnh if của tôi hoạt động. Nhưng khi tôi kiểm tra DOM bằng firebug trong firefox, thuộc tính disabled không xuất hiện.

ai đó có thể giúp tôi không?

PS: xin đừng tập trung vào các chức năng hoặc các câu lệnh if bản thân, hoạt động tốt chỉ của nó mà attr đó không làm việc cho người khuyết tật ...

chỉnh sửa: một loại đầu vào của nó = "hidden "có thể là vô hiệu hóa không hoạt động trên các trường ẩn?

+0

trình duyệt nào bạn sử dụng? Bạn đã thử một cái khác chưa? – abatishchev

+0

firebug -> firefox. – meo

+2

như abatishchev hỏi trước: bạn có thử nó trong trình duyệt khác và làm tương tự không? –

Trả lời

41

Cảm ơn tất cả các bạn đã đóng góp! Tôi đã tìm thấy sự cố:

ITS A FIREBUG BUG !!!

Mã của tôi hoạt động. Tôi đã yêu cầu PHP Dev thay đổi kiểu đầu vào được ẩn trong văn bản kiểu nhập. Tính năng bị tắt hoạt động. Nhưng bảng điều khiển firebug không cập nhật trạng thái này!

bạn có thể kiểm tra lỗi này bằng cách tự khắc phục lỗi này tại đây http://jsbin.com/uneti3/3#. Thx đến aSeptik cho trang ví dụ.

cập nhật: 2. tháng 6 năm 2012: Firebug trong FF11 vẫn có lỗi này.

+1

thats không thực sự đáng tin cậy, nó chỉ là param với không có giá trị, phù thủy có nghĩa là nó vẫn defualt. bạn nên vô hiệu hóa = "1" để thực sự vô hiệu hóa nó:/ – RobertPitt

+7

không, bạn nên sử dụng disabled = "disabled" thành w3c. Và đây chính xác là mã của tôi nếu bạn đọc bài viết đầu tiên của tôi – meo

+0

Sự cố bạn gặp phải không phải từ Firebug không cập nhật trạng thái, đó là mã của bạn. Câu trả lời của aSeptik là đúng. Nếu bạn không tin tôi, hãy chạy mã của bạn trong Chrome hoặc IE. – Mottie

7

Hãy thử đang được cập nhật này:

$(bla).click(function(){   
    if (something) { 
    console.log($target.prev("input")) // gives out the right object 
    $target.toggleClass("open").prev("input").attr("disabled", "true"); 
    }else{ 
    $target.toggleClass("open").prev("input").removeAttr("disabled"); //this works 
    } 
}) 
+0

vẫn không hoạt động – meo

+0

đây không phải là cách thích hợp để sử dụng toggleClass! –

+0

tôi vừa thêm .attr ("disabled", "true"); để đăng chức năng –

7

CẬP NHẬT

DEMO: http://jsbin.com/uneti3/3

mã của bạn là sai, nó phải là một cái gì đó như thế này:

$(bla).click(function() { 
     var disable = $target.toggleClass('open').hasClass('open'); 
     $target.prev().prop("disabled", disable); 
    }); 

bạn đang sử dụng chức năng toggleClass theo cách sai

+0

Tại sao tôi sử dụng nó sai? tôi chỉ cần chỉ định một lớp và nó chuyển đổi một lớp này. Par này hoạt động tốt. (Giống như tài liệu jquery nói với tôi). Nhưng tôi vẫn cố gắng làm theo cách này và nó không hoạt động. – meo

+0

tài liệu jquery nói ngược lại với những gì bạn đã làm! tài liệu nói rằng bạn có thể sử dụng một dòng mã để thực hiện tương tự nếu bạn có statment! xem cập nhật của tôi! –

+0

yeah chắc chắn của nó không thích hợp đặt nó không sai tôi chỉ có thể sử dụng addclass và loại bỏ lớp học nhưng tôi đã lười biếng, P nhưng điều này không phải là vấn đề. Vấn đề là firebug không thay đổi trạng thái vô hiệu hóa trong DOM ngay cả khi nó. Mã của tôi hoạt động, tôi chỉ không thấy id vì các kiểu nhập của tôi bị ẩn. Cảm ơn vì mã được tối ưu hóa, tôi đã điều chỉnh nó. +1 – meo

-2

Hãy thử

$(bla).click(function(){   
    if (something) { 
    console.log("A:"+$target.prev("input")) // gives out the right object 
    $target.toggleClass("open").prev("input").attr("disabled", "disabled"); 
    }else{ 
    console.log("A:"+$target.prev("input")) // any thing from there for a single click? 
    $target.toggleClass("open").prev("input").removeAttr("disabled"); //this works 
    } 
}); 
2

Tôi đã gặp phải sự cố tương tự trong khi chuyển sang trạng thái vô hiệu hóa của nút! Sau khi kích hoạt removeProp('disabled'), nút đã từ chối nhận lại "bị vô hiệu hóa" một lần nữa! Tôi đã tìm thấy một giải pháp thú vị: sử dụng prop("disabled",true) để tắt nút và prop("disabled",false) để bật lại! Bây giờ tôi đã có thể chuyển đổi trạng thái "bị vô hiệu hóa" của nút của tôi bao nhiêu lần tôi cần! Hãy dùng thử.

-1
$("#vp_code").textinput("enable"); 
$("#vp_code").textinput("disable"); 

bạn có thể thử nó

+3

Cố gắng giải thích tại sao bạn nghĩ đây là giải pháp thích hợp – Mawcel

-2

Để thêm thuộc tính tàn tật

$('#id').attr("disabled", "true"); 

Để loại bỏ thuộc tính Disabled

$('#id').removeAttr('disabled'); 
Các vấn đề liên quan