jQuery สูญเสียการโฟกัส


253

ฉันพยายามแสดงคอนเทนเนอร์ถ้าฟิลด์อินพุตได้รับโฟกัสและ - นั่นเป็นปัญหาจริง - ซ่อนคอนเทนเนอร์ถ้าโฟกัสหายไป มีเหตุการณ์ตรงกันข้ามสำหรับการโฟกัสของ jQuery หรือไม่

โค้ดตัวอย่างบางส่วน:

<input type="text" value="" name="filter" id="filter"/>

<div id="options">some cool options</div>

<script type="text/javascript">
  $('#options').hide();

  $('#filter').focus(function() {
    $('#options').appear();
  });
</script>

และสิ่งที่ฉันต้องการทำคืออะไรเช่นนี้:

$('#filter').focus_lost(function() {
  $('#options').hide();
});

คำตอบ:


419

ใช้เหตุการณ์เบลอเพื่อเรียกใช้ฟังก์ชันของคุณเมื่อองค์ประกอบสูญเสียโฟกัส:

$('#filter').blur(function() {
  $('#options').hide();
});

3
สิ่งที่ถ้าเบราว์เซอร์เช่นรถยนต์โครเมี่ยมกรอกช่องที่ฉันไม่คิดว่ามันจะเรียกเบลอ ()
ไฟลนก้น

40

แบบนี้:

$(selector).focusout(function () {
    //Your Code
});

10
ความแตกต่างจากสิ่งนี้กับblurอะไร
cregox

5
วิธีการเบลอใช้เพื่อลบโฟกัส (เช่นทำให้ไม่เป็นปัจจุบัน) วัตถุที่เป็นของมัน การให้ช่องข้อความเบลอจะย้ายเคอร์เซอร์ไปยังฟิลด์ถัดไป การให้หน้าต่างความพร่ามัวจะย้ายไปอยู่ด้านหลังหน้าต่างอื่นทั้งหมด นี่ไม่ใช่คำสงวนเพื่อให้คุณสามารถประกาศตัวแปรหรือฟังก์ชั่นของคุณเองที่เรียกว่าเบลอ แต่ถ้าคุณทำเช่นนั้นคุณจะไม่สามารถใช้วิธีนี้เพื่อควบคุมว่าวัตถุใดเป็นปัจจุบัน
SoftwareARM

2
วิธีการโฟกัสใช้เพื่อให้โฟกัส (เช่นทำให้เป็นปัจจุบัน) วัตถุที่เป็นของมัน การให้ฟิลด์ข้อความโฟกัสจะย้ายเคอร์เซอร์ไปที่ฟิลด์นั้น การให้หน้าต่างโฟกัสจะเลื่อนไปที่ด้านหน้าของหน้าต่างอื่นทั้งหมด การกระทำที่ไม่ได้ระบุวัตถุเฉพาะที่จะนำไปใช้เพื่อใช้กับวัตถุที่มีโฟกัส นี่ไม่ใช่คำสงวนเพื่อให้คุณสามารถประกาศตัวแปรหรือฟังก์ชั่นของคุณเองที่เรียกว่าโฟกัส แต่ถ้าคุณทำเช่นนั้นคุณจะไม่สามารถใช้วิธีนี้เพื่อควบคุมว่าวัตถุใดเป็นปัจจุบัน
SoftwareARM

25
คำอธิบายของ SoftwareARM ไม่สมเหตุสมผลกับฉันในการอ่านครั้งแรกดังนั้นฉันจึงพบคำอธิบายอื่นในหน้าเอกสารของ jQuery ( api.jquery.com/focusout ) ที่ฉันคิดว่าจะเป็นประโยชน์กับผู้อื่น: เหตุการณ์ focusout ถูกส่งไปยังองค์ประกอบ เมื่อมันหรือองค์ประกอบใด ๆ ที่อยู่ภายในมันสูญเสียโฟกัส สิ่งนี้แตกต่างจากเหตุการณ์เบลอที่สนับสนุนการตรวจจับการสูญเสียโฟกัสจากองค์ประกอบหลัก (กล่าวอีกนัยหนึ่งคือสนับสนุนการทำให้เกิดเหตุการณ์)
แบรด


12

เหตุการณ์เบลอ:เมื่อองค์ประกอบหมดโฟกัส

เหตุการณ์ focusout:เมื่อองค์ประกอบหรือองค์ประกอบใด ๆ ในนั้นสูญเสียโฟกัส

เนื่องจากไม่มีสิ่งใดอยู่ภายในองค์ประกอบตัวกรองทั้งความเบลอและการโฟกัสจะทำงานในกรณีนี้

$(function() {
  $('#filter').blur(function() {
    $('#options').hide();
  });
})

jsfiddle with blur: http://jsfiddle.net/yznhb8pc/

$(function() {
  $('#filter').focusout(function() {
    $('#options').hide();
  });
})

jsfiddle พร้อม focusout: http://jsfiddle.net/yznhb8pc/1/


0

หาก 'ตัวเลือกสุดเจ๋ง' ถูกซ่อนไว้จากมุมมองก่อนที่จะมีการโฟกัสฟิลด์คุณจะต้องสร้างสิ่งนี้ใน JQuery แทนที่จะมีไว้ใน DOM เพื่อให้ทุกคนที่ใช้โปรแกรมอ่านหน้าจอไม่เห็นข้อมูลที่ไม่จำเป็น ทำไมพวกเขาต้องฟังมันเมื่อเราไม่ต้องเห็นมัน?

ดังนั้นคุณสามารถตั้งค่าตัวแปรดังนี้:

var $coolOptions= $("<div id='options'></div>").text("Some cool options");

จากนั้นผนวก (หรือเสริม) ที่โฟกัส

$("input[name='input_name']").focus(function() {
    $(this).append($coolOptions);
});

จากนั้นลบเมื่อโฟกัสสิ้นสุด

$("input[name='input_name']").focusout(function() {
    $('#options').remove();
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.