การปิดข้อมูลจะลบองค์ประกอบอย่างสมบูรณ์ ใช้วิธี. hide () ของ jQuery แทน
วิธีแก้ไขด่วน:
ใช้ inline javascript เพื่อซ่อนองค์ประกอบ onclick ดังนี้:
<div class="alert" style="display: none">
<a class="close" onclick="$('.alert').hide()">×</a>
<strong>Warning!</strong> Best check yo self, you're not looking too good.
</div>
<a href="#" onclick="$('alert').show()">show</a>
http://jsfiddle.net/cQNFL/
อย่างไรก็ตามควรใช้เฉพาะในกรณีที่คุณขี้เกียจ (ซึ่งไม่ใช่เรื่องดีหากคุณต้องการแอปที่ดูแลรักษาได้)
วิธีการทำอย่างถูกต้อง:
สร้างแอตทริบิวต์ข้อมูลใหม่สำหรับซ่อนองค์ประกอบ
Javascript:
$(function(){
$("[data-hide]").on("click", function(){
$("." + $(this).attr("data-hide")).hide()
// -or-, see below
// $(this).closest("." + $(this).attr("data-hide")).hide()
})
})
จากนั้นเปลี่ยนการปิดข้อมูลเป็นการซ่อนข้อมูลในมาร์กอัป ตัวอย่างที่ jsfiddle
$("." + $(this).attr("data-hide")).hide()
สิ่งนี้จะซ่อนองค์ประกอบทั้งหมดที่มีคลาสที่ระบุไว้ใน data-hide กล่าวคือdata-hide="alert"
จะซ่อนองค์ประกอบทั้งหมดด้วยคลาสการแจ้งเตือน
Xeon06ให้ทางเลือกอื่น:
$(this).closest("." + $(this).attr("data-hide")).hide()
สิ่งนี้จะซ่อนเฉพาะองค์ประกอบหลักที่ใกล้เคียงที่สุด สิ่งนี้มีประโยชน์มากหากคุณไม่ต้องการให้การแจ้งเตือนแต่ละคลาสไม่ซ้ำกัน อย่างไรก็ตามโปรดทราบว่าคุณต้องวางปุ่มปิดไว้ในการแจ้งเตือน
คำจำกัดความของ. closest จากjquery doc :
สำหรับแต่ละองค์ประกอบในชุดให้รับองค์ประกอบแรกที่ตรงกับตัวเลือกโดยการทดสอบองค์ประกอบเองและสำรวจผ่านบรรพบุรุษของมันในโครงสร้าง DOM
alert
) ในหน้า วิธีแก้ปัญหาคือการแทนที่เนื้อหาของการโทรกลับด้วยบรรทัดนี้$(this).closest("." + $(this).attr("data-hide")).hide();
ซึ่งจะส่งผลต่อองค์ประกอบหลักที่ใกล้เคียงที่สุดเท่านั้นเนื่องจากโดยทั่วไปปุ่มปิดจะอยู่ในการแจ้งเตือนที่มีผล