jQuery: วิธีค้นหาปุ่มที่ไม่รวมอินพุต / เลือก / textarea แรกที่มองเห็นได้?


88

ฉันเหนื่อย

$(":input:not(input[type=button],input[type=submit],button):visible:first")

แต่ไม่พบอะไรเลย

ความผิดพลาดของฉันคืออะไร?

UPD: ฉันดำเนินการกับ $ (document) .load ()

<script type="text/javascript">
$(window).load(function () {
  var aspForm  = $("form#aspnetForm");
  var firstInput = $(":input:not(input[type=button],input[type=submit],button):visible:first", aspForm);
  firstInput.focus();
});
</script>

และในการดีบักฉันเห็นว่า firstInput ว่างเปล่า

UPD2: ฉันอยู่ในเพจ ASP.NET ที่ทำงานภายใต้ Sharepoint

จนถึงตอนนี้ฉันพบว่าสำหรับบางองค์ประกอบจะพบพวกมัน (สำหรับองค์ประกอบคงที่) และสำหรับบางองค์ประกอบก็ไม่พบ :(


ลอง "input" แทน ": input" ไหม
Alec

ควรทำงานได้ดี ปัญหาของคุณอยู่ที่อื่น คุณไม่ดำเนินการนี้ก่อน$(document)คือready()?
BalusC

คุณมี html เฉพาะสำหรับค้นหาหรือไม่?
ชิกิ

บางทีอินพุตแรกเป็นของtype="hidden"? คลิกขวาที่หน้าและดูแหล่งที่มา HTML ที่สร้างขึ้นมีความสำคัญเช่นกัน หากไม่มีมันและSSCCEที่เหมาะสมก็จะถ่ายภาพในที่มืด
BalusC

คำตอบ:


168

ทำไมไม่เพียงกำหนดเป้าหมายสิ่งที่คุณต้องการ ( สาธิต )?

$('form').find('input[type=text],textarea,select').filter(':visible:first');

แก้ไข

หรือใช้ jQuery : input selector เพื่อกรองฟอร์มลูกหลาน

$('form').find('*').filter(':input:visible:first');

5
ช่องทำเครื่องหมาย? วิทยุ? รหัสผ่าน? ไม่ต้องพูดถึงประเภทอินพุต HTML5 ใหม่มากมาย
BalusC

9
@BalusC $ ('form'). find (': input'). filter (': visible: first')
Abe Petrillo

1
แม้ว่าจะได้ผลในระดับหนึ่ง แต่ก็ไม่สนใจแอตทริบิวต์ tabindex
eoleary

2
nitpick ขนาดเล็ก แต่มีประโยชน์เพิ่มเติม: แทนที่จะเป็น ': visible: first', ': visible: enable: first' จะเป็นตัวกรองที่ดีกว่ามากเนื่องจากองค์ประกอบด้านบนอาจถูกปิดใช้งานในบางกรณีและไม่สามารถปรับโฟกัสได้
Prahlad Yeri

1
@PrahladYeri บางทียังไม่รวมแบบอ่านอย่างเดียว':input:visible:enabled:not([readonly]):first'
JustinStolle

13

โค้ด JQuery ใช้ได้ดี คุณต้องดำเนินการในตัวจัดการพร้อมไม่ใช่ในเหตุการณ์โหลดหน้าต่าง

<script type="text/javascript">
$(function(){
  var aspForm  = $("form#aspnetForm");
  var firstInput = $(":input:not(input[type=button],input[type=submit],button):visible:first", aspForm);
  firstInput.focus();
});
</script>

อัปเดต

ฉันลองใช้ตัวอย่างของ Karim79 (ขอบคุณสำหรับตัวอย่าง) และใช้งานได้ดี: http://jsfiddle.net/2sMfU/


3
ขอบคุณ @BalusC ฉันจะไปยิงตัวตายตอนนี้ ฉันเกลียดตัวเอง. ฉันสามารถใช้เวลาหนึ่งชั่วโมงที่ผ่านมาโดยไม่ยุ่งกับรหัสการทำงาน ฉันสามารถเลี้ยงสุนัขทำความสะอาดครัวได้ มีหลายสิ่งที่ฉันสามารถทำได้ ตอนนี้สิ่งที่ฉันมีคือความเจ็บปวด ลาก่อนตลอดกาล .... และใช่ฉันควรจะฟัง
karim79

@karim: rofl. คุณยินดีต้อนรับ :) Btw: ฉันอาบน้ำให้ลูก ๆ แล้วพาพวกเขาเข้านอนเลี้ยงสุนัขและแมวและเอาโคคาโคล่าไปเอง;)
BalusC

7

นี่คือบทสรุปของฉันข้างต้นและทำงานได้ดีสำหรับฉัน ขอบคุณสำหรับข้อมูล!

<script language='javascript' type='text/javascript'>
    $(document).ready(function () {
        var firstInput = $('form').find('input[type=text],input[type=password],input[type=radio],input[type=checkbox],textarea,select').filter(':visible:first');
        if (firstInput != null) {
            firstInput.focus();
        }
    });
</script>

3

นี่เป็นการปรับปรุงคำตอบของ @ Mottie เนื่องจาก jQuery 1.5.2 :textเลือกinputองค์ประกอบที่ไม่มีtypeแอตทริบิวต์ที่ระบุ(ซึ่งในกรณีนี้type="text"เป็นนัย):

$('form').find(':text,textarea,select').filter(':visible:first')

1

นี่คือทางออกของฉัน โค้ดควรจะง่ายพอที่จะปฏิบัติตาม แต่นี่คือแนวคิด:

  • รับอินพุตเลือกและพื้นที่ข้อความทั้งหมด
  • กรองปุ่มทั้งหมดและฟิลด์ที่ซ่อนอยู่
  • กรองเพื่อเปิดใช้งานเฉพาะฟิลด์ที่มองเห็นได้
  • เลือกอันแรก
  • โฟกัสฟิลด์ที่เลือก

รหัส:

function focusFirst(parent) {
    $(parent).find('input, textarea, select')
        .not('input[type=hidden],input[type=button],input[type=submit],input[type=reset],input[type=image],button')
        .filter(':enabled:visible:first')
        .focus();
}

จากนั้นเรียก focusFirst ด้วยองค์ประกอบหลักหรือตัวเลือกของคุณ

ตัวเลือก:

focusFirst('form#aspnetForm');

ธาตุ:

var el = $('form#aspnetForm');
focusFirst(el);

0

คุณสามารถลองรหัสด้านล่าง ...

$(document).ready(function(){
    $('form').find('input[type=text],textarea,select').filter(':visible:first').focus();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<form>
<input type="text" />
<input type="text" />
<input type="text" />
<input type="text" />
<input type="text" />
    
<input type="submit" />
</form>

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