2010-07-07 34 views
29

Tôi đang gặp một chút khó khăn khi cố gắng tìm ra cách để có được một phần nhất định của mã của tôi hoạt động.HTML hộp kiểm onclick được gọi là trong Javascript

<input type="checkbox" id="check_all_1" name="check_all_1" title="Select All" onclick="selectAll(document.wizard_form, this);"> 
<label for="check_all_1" onclick="toggleCheckbox('check_all_1'); return false;">Select All</label> 

Đây là HTML của tôi hoạt động như mong muốn (nhấp vào văn bản sẽ nhấp vào hộp). Javascript cho nó là khá đơn giản:

function toggleCheckbox(id) { 
    document.getElementById(id).checked = !document.getElementById(id).checked; 
} 

Tuy nhiên tôi muốn onclick xảy ra cho đầu vào khi nhãn là những gì làm cho hộp kiểm được nhấp. Tại thời điểm này, các onClick js không hoạt động. Một gợi ý về cách làm điều này là gì? Tôi đã cố gắng thêm onclick của đầu vào vào onclick của nhãn nhưng điều đó không hoạt động.

Mọi đề xuất/giải pháp sẽ tuyệt vời.

Trả lời

49

Làm thế nào về việc đưa các checkboxvào các label, làm cho nhãn tự động "click nhạy cảm" đối với các hộp kiểm tra, và cho vào hộp kiểm một sự kiện onchange?

<label ..... ><input type="checkbox" onchange="toggleCheckbox(this)" .....> 

function toggleCheckbox(element) 
{ 
    element.checked = !element.checked; 
} 

Điều này cũng sẽ bắt người dùng sử dụng bàn phím để chuyển đổi hộp kiểm, nội dung nào đó onclick thì không.

+0

Sử dụng 'thuộc tính for' là tốt như đưa đầu vào bên trong nhãn, nhưng nó không làm giảm đánh dấu một chút . 1 cho 'onchange' và suy nghĩ của chúng tôi người dùng bàn phím thấp :-) –

+0

@Andy E - Theo lý thuyết có, trong thực tế không. IE 6 và IE 7 không xử lý các nhãn ngầm một cách chính xác (http://www.evotech.net/blog/2009/09/ie6ie7-implicit-label-bug/). Nhãn rõ ràng được ưa thích. –

+0

Nếu đặt nhãn ở bên ngoài làm cho nhãn có thể tự động chuyển đổi thì bật/tắtCheckbox không cần nữa. Tuy nhiên selectAll là, nếu tôi thay thế toggleCheckbox (điều này) cho selectAll trong ví dụ của bạn nó không hoạt động chút nào. Tuy nhiên tôi thích có các nhãn ở bên ngoài và sử dụng onchange thay thế. – Craig

1

Nhãn không có onclick sẽ hoạt động như bạn mong đợi. Nó thay đổi đầu vào. Điều bạn muốn thực hiện là thực hiện selectAll() khi bạn nhấp vào nhãn, phải không? Sau đó, chỉ chọn thêm tất cả vào nhãn onclick. Hoặc quấn đầu vào cho nhãn và gán onclick chỉ dành cho các nhãn

<label for="check_all_1" onclick="selectAll(document.wizard_form, this);"> 
    <input type="checkbox" id="check_all_1" name="check_all_1" title="Select All"> 
    Select All 
</label> 
+0

Thực hiện kết quả này trong hộp kiểm không bao giờ được kiểm tra cũng như không có bất kỳ hộp kiểm nào. Bạn đúng Tôi muốn selectAll() để thực hiện khi nhãn được nhấn. – Craig

+0

Đã sửa lỗi, đã thực hiện việc này, quên rằng đây phải là tên id cho phần nhãn. – Craig

0

jQuery có một chức năng mà có thể làm điều này:

  1. bao gồm các kịch bản sau đây trong đầu của bạn:

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script> 
    

    (hoặc chỉ cần tải xuống tệp jQuery.js trực tuyến và bao gồm tệp đó cục bộ)

  2. sử dụng kịch bản này để chuyển đổi các hộp kiểm tra khi đầu vào được nhấp:

    var toggle = false; 
    $("#INPUTNAMEHERE").click(function() { 
         $("input[type=checkbox]").attr("checked",!toggle); 
         toggle = !toggle; 
    }); 
    

Điều đó sẽ làm những gì bạn muốn nếu tôi hiểu những gì bạn đang cố gắng làm.

+1

Tôi muốn thực hiện thay đổi này nhỏ vì nó sẽ được thực hiện ở hàng chục vị trí trên mỗi hệ thống cũ mà không thực sự thay đổi chính xác quy mô lớn dễ dàng. – Craig

+0

Hàng chục vị trí một phần sẽ dễ dàng được bao hàm bởi điều này, vì jQuery được thiết kế cho chức năng trên các tệp và hệ thống lớn (như hầu hết các ngôn ngữ kịch bản lệnh). Nhưng nếu bạn nghĩ rằng hệ thống của bạn quá cũ để thực hiện một sự thay đổi như thế này, thì tôi đoán tôi sẽ không được sử dụng nhiều trong trường hợp này. Nếu bạn chưa bao giờ sử dụng jQuery, mặc dù, tôi đề nghị bạn hãy xem khi bạn có thời gian ... nó tuyệt vời để xử lý các hành vi như thế này. – rownage

0

Bạn cũng có thể trích xuất mã sự kiện từ HTML, như thế này:

<input type="checkbox" id="check_all_1" name="check_all_1" title="Select All" /> 
<label for="check_all_1">Select All</label> 

<script> 
function selectAll(frmElement, chkElement) { 
    // ... 
} 
document.getElementById("check_all_1").onclick = function() { 
    selectAll(document.wizard_form, this); 
} 
</script> 
Các vấn đề liên quan