วิธียกเลิกการเลือกที่ช่องทำเครื่องหมายโดยใช้ jQuery Uniform library


144

checkboxฉันมีปัญหากับยกเลิกการเลือก ดูjsFiddle ของฉันที่ฉันพยายาม:

   $("#check2").attr("checked", true);

ผมใช้เครื่องแบบสำหรับจัดแต่งทรงผมcheckboxและมันก็ไม่ได้ทำงานเพื่อตรวจสอบ / ยกเลิกcheckbox

ความคิดใด ๆ


ทั้งใน google chrome และ firefox มันใช้งานไม่ได้สำหรับฉัน
โหวตขึ้น

คำตอบ:


108

ดูเอกสารของพวกเขาพวกเขามี$.uniform.updateคุณสมบัติในการรีเฟรชองค์ประกอบ "ชุด"

ตัวอย่าง: http://jsfiddle.net/r87NH/4/

$("input:checkbox").uniform();

$("body").on("click", "#check1", function () {
    var two = $("#check2").attr("checked", this.checked);
    $.uniform.update(two);
});

5
@mkoryak: ทำงานได้ดี1.4.4แต่ลิงก์ไปยังไฟล์ js และ css นั้นใช้งานไม่ได้ นี่คือซอที่อัพเดท หากคุณหมายความว่ามันจะมีปัญหาเฉพาะใน1.6แล้วว่าอาจจะจริงตั้งแต่ jQuery .attr()แล้วเปลี่ยนพฤติกรรมของหวนกลับ เมื่อใช้งาน1.6หรือสูงกว่าคุณควรใช้งาน.prop()จริง
user113716

ฉันไม่เห็นความแตกต่างอย่างแน่นอนระหว่าง jsFiddle ที่อัปเดตกับของเดิม (ลงไปที่ช่องทำเครื่องหมายติดป้ายกำกับผิดที่ 2) ยกเว้นรุ่นที่อัปเดตแล้วจะได้ผลกับฉันและต้นฉบับไม่ได้!
iPadDeveloper2011

BTW เหล่านี้ทั้งหมดพิกเซลวาดรูปแบบ Uniform มองอย่างunsexyบนจอประสาทตา
เป็นตัวเป็นตน

ไม่ทำงานสำหรับฉันด้วยเช่นกัน jsfiddle ไม่ทำงานหรือสับสน
matthy

367

วิธีแก้ปัญหาที่ง่ายกว่าคือการทำเช่นนี้แทนที่จะใช้เครื่องแบบ:

$('#check1').prop('checked', true); // will check the checkbox with id check1
$('#check1').prop('checked', false); // will uncheck the checkbox with id check1

นี่จะไม่ทริกเกอร์การกระทำการคลิกใด ๆ ที่กำหนดไว้

คุณยังสามารถใช้:

$('#check1').click(); // 

การดำเนินการนี้จะสลับการทำเครื่องหมาย / ไม่เลือกสำหรับช่องทำเครื่องหมาย แต่สิ่งนี้จะทริกเกอร์การคลิกใด ๆ ที่คุณกำหนดไว้ ดังนั้นระวัง

แก้ไข : jQuery 1.6+ prop()ไม่ใช้attr()สำหรับช่องทำเครื่องหมายค่าที่เลือก


2
สิ่งนี้ทำให้แอตทริบิวต์ที่ถูกตรวจสอบตามที่เป็นใน jQuery 1.7.1 สำหรับฉัน ใช้งานได้ แต่ไม่ทำในสิ่งที่คุณคิดว่าควรจะเป็น
2rs2ts

24
$("#chkBox").attr('checked', false); 

สิ่งนี้ใช้ได้สำหรับฉันนี่จะเป็นการยกเลิกการเลือกกล่องกาเครื่องหมาย ในทำนองเดียวกันเราสามารถใช้

$("#chkBox").attr('checked', true); 

เพื่อตรวจสอบช่องทำเครื่องหมาย


4
ฉันคิดว่ามันจะดีกว่าถ้าใช้ฟังก์ชั่น. prop () แทน .attr () ไม่อย่างนั้นมันจะไม่ทำงานอย่างที่คาดไว้ ...
Simon Steinberger

13

หากคุณกำลังใช้ชุด 1.5แล้วใช้เคล็ดลับง่าย ๆ นี้เพื่อเพิ่มหรือลบคุณลักษณะของการตรวจสอบ
เพียงแค่เพิ่มค่า = "ตรวจสอบ" ในช่องใส่ของช่องทำเครื่องหมายของคุณ
เพิ่มรหัสนี้ในuniform.js> function doCheckbox(elem){>.click(function(){

if ( $(elem+':checked').val() == 'check' ) {
    $(elem).attr('checked','checked');           
}
else {
    $(elem).removeAttr('checked');
}   

หากคุณไม่ต้องการเพิ่ม value = "check" ในกล่องใส่ข้อมูลของคุณเพราะในบางกรณีคุณเพิ่มช่องทำเครื่องหมายสองช่องเพื่อใช้สิ่งนี้

if ($(elem).is(':checked')) {
 $(elem).attr('checked','checked');
}    
else
{    
 $(elem).removeAttr('checked');
}

หากคุณใช้เครื่องแบบ 2.0 ให้ใช้เคล็ดลับง่าย ๆ นี้เพื่อเพิ่มหรือลบคุณลักษณะของการตรวจสอบ
ในclassUpdateChecked($tag, $el, options) {การเปลี่ยนแปลงฟังก์ชั่นนี้

if ($el.prop) {
    // jQuery 1.6+
    $el.prop(c, isChecked);
}

ถึง

if ($el.prop) {
    // jQuery 1.6+
    $el.prop(c, isChecked);
    if (isChecked) {
        $el.attr(c, c);
    } else {
        $el.removeAttr(c);
    }

}

7
$('#check1').prop('checked', true).uniform(); 
$('#check1').prop('checked', false).uniform(); 

สิ่งนี้ใช้ได้สำหรับฉัน


ขอบคุณมาก. ฉันยืนยันได้ว่านี่เป็นทางออกที่ง่ายที่สุด
Rudolph Opperman


1

คุณต้องโทร$.uniform.update()หากคุณอัปเดตองค์ประกอบโดยใช้ javascript ตามที่ระบุไว้ในเอกสารประกอบ


1

ประการแรกcheckedสามารถมีค่าcheckedหรือสตริงว่าง

$("input:checkbox").uniform();

$('#check1').live('click', function() {
    $('#check2').attr('checked', 'checked').uniform();
});

checkedไม่มีอะไรผิดปกติกับการส่งผ่านบูลเป็นค่าของ
user113716

แต่เราไม่ได้เขียนมาร์กอัป HTML HTMLInputElementเรากำลังตั้งค่าคุณสมบัติในการ ลองดูที่checkedสถานที่ให้บริการ
user113716

ไม่เป็นไร…ฉันไม่เข้าใจจริงๆว่าทำไมมันจึงไม่ถูกต้องเช่นกัน…
nyuszika7h

การส่งผ่านค่าบูลีนสนับสนุนเฉพาะใน 1.6+ ก่อนหน้านั้นคุณต้องตั้งค่าแอตทริบิวต์ที่ตรวจสอบแล้วเป็น 'ตรวจสอบ' หรือลบออก
mkoryak

1

ในบางกรณีคุณสามารถใช้สิ่งนี้:

$('.myInput').get(0).checked = true

สำหรับการสลับคุณสามารถใช้ถ้ามีฟังก์ชั่น


1

 $("#checkall").change(function () {
            var checked = $(this).is(':checked');
            if (checked) {
                $(".custom-checkbox").each(function () {
                    $(this).prop("checked", true).uniform();
                });
            } else {
                $(".custom-checkbox").each(function () {
                    $(this).prop("checked", false).uniform();
                });
            }
        });

        // Changing state of CheckAll custom-checkbox
        $(".custom-checkbox").click(function () {
            if ($(".custom-checkbox").length == $(".custom-checkbox:checked").length) {
                $("#chk-all").prop("checked", true).uniform();
            } else {
                $("#chk-all").removeAttr("checked").uniform();
            }
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id='checkall' /> Select All<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="PHP"> PHP<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="AngularJS"> AngularJS<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="Python"> Python<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="Java"> Java<br/>


0

วิธีอื่นในการทำคือ

ใช้ $('#check2').click();

สิ่งนี้ทำให้เกิดการตรวจสอบช่องทำเครื่องหมายและอัปเดตมาสก์


-1

ช่องทำเครื่องหมายที่ทำหน้าที่เหมือนวิทยุ btn

$(".checkgroup").live('change',function() { var previous=this.checked; $(".checkgroup).attr("checked", false); $(this).attr("checked", previous); });

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.