ซ่อน / แสดงองค์ประกอบด้วยบูลีน


109

ฉันมักจะมีสิ่งเหล่านี้มากมายในรหัสของฉัน

if(shouldElementBeVisible)
    $element.show()
else
    $element.hide()

มีวิธีที่หรูหรากว่านี้ที่บรรจุด้วยจาวาสคริปต์ jquery หรือขีดล่างหรือไม่? ตามหลักการแล้วฉันต้องการอะไรที่มีลักษณะเช่นนี้

$element.showOrHideDependingOn(shouldElementBeVisible)


@SpencerWieczorek คำถามนั้นเกิดขึ้นเพื่ออ้างอิงtoggleแต่เป็นคำถามที่แตกต่างออกไป
Aakil Fernandes

คำตอบ:


166

เห็นได้ชัดว่าคุณสามารถส่งผ่านบูลีนไปยังtoggleฟังก์ชันได้

$element.toggle(shouldElementBeVisible)

34
ฉันขอแนะนำให้ใช้$element.toggle(!!shouldElementBeVisible)เพื่อป้องกันการกดปุ่ม "โอเวอร์โหลด"โดยไม่ได้ตั้งใจเว้นแต่คุณจะแน่ใจมากว่าตัวแปรนั้นเป็นค่าบูลีน
Jeroen

8
$element.toggle(shouldElementBeVisible == true)ตัวเลือกที่ดีอาจจะมี
jox

"0"และ"false"ได้รับการปฏิบัติที่แตกต่างfalseไปจากเดิมมากดังนั้นฉันจึงไม่คิดว่าความแตกต่างนั้นมีความสำคัญจริงๆ - แม้0จะไม่ถูกต้องหากคุณต้องการให้ซ่อนเนื่องจากเวลาในการเคลื่อนไหวที่กำหนดไว้ทั้งหมด แต่ยังคงมีการเปิดเผย
Tasgall

19

ใช่แล้ว!

$element.toggle();

ไม่มีพารามิเตอร์ใด ๆtoggleเพียงแค่สลับการเปิดเผยองค์ประกอบ (ฉันไม่ได้หมายถึงvisibilityคุณสมบัติ) และขึ้นอยู่กับสถานะปัจจุบันขององค์ประกอบ

$element.toggle(display);

หากคุณเรียกtoggleด้วยพารามิเตอร์บูลีนองค์ประกอบจะแสดงว่าเป็นtrueและhiddenถ้าเป็นfalse

แหล่งที่มา


2
ฉันกำลังจะทำเครื่องหมายสิ่งนี้ผิดแล้วฉันก็รู้ว่าการอ้างอิง API สุดท้ายช่วยให้คุณสามารถตั้งค่าบูลีนแทนอ็อบเจ็กต์ตัวเลือกได้
Aakil Fernandes

สองสามบรรทัดในนั้น: "โดยไม่มีพารามิเตอร์เมธอด. สลับ () เพียงแค่สลับการมองเห็นขององค์ประกอบ"
Zach Spencer

2
นั่นตรงกันข้ามกับที่ฉันต้องการจริงๆ ฉันต้องการให้สถานะปัจจุบันขององค์ประกอบไม่เกี่ยวข้อง สถานะควรขึ้นอยู่กับตัวแปรบูลีน
Aakil Fernandes

@AakilFernandes ดังนั้นตัวแปรisShownจึงไม่เกี่ยวข้องกับสิ่ง$elementที่มองเห็นได้หรือไม่? แต่ตัวแปรแยกต่างหากที่ไม่เกี่ยวข้องกับองค์ประกอบ?
Spencer Wieczorek

ใช่ขอโทษฉันควรเปลี่ยนชื่อเป็นisShownบางอย่างshouldElementBeVisibleเพื่อให้ชัดเจนยิ่งขึ้น
Aakil Fernandes


0

ฟังก์ชั่น.toggle()เปลี่ยนdisplayองค์ประกอบขององค์ประกอบ

หากคุณต้องการเปลี่ยนvisibilityฉันขอแนะนำให้ใช้?:โอเปอเรเตอร์แทน สำหรับสิ่งนี้ใน CSS ของคุณให้ตั้งค่าการเปิดเผยเป็นสถานะดั้งเดิมและใน JS เพียงแค่ใส่:

    var checkboxChecked = $("#yourCheckbox").(":checked");

    $("#yourElement").css("visibility", checkboxChecked ? "visible" : "hidden");
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.