jQuery - กำหนดว่าองค์ประกอบอินพุตเป็นกล่องข้อความหรือเลือกรายการ


90

ฉันจะตรวจสอบได้อย่างไรว่าองค์ประกอบที่ส่งคืนโดย: input filter ใน jQuery เป็น textbox หรือ select list

ฉันต้องการมีพฤติกรรมที่แตกต่างกันสำหรับแต่ละอย่าง (กล่องข้อความส่งคืนค่าข้อความเลือกส่งคืนทั้งคีย์และข้อความ)

ตัวอย่างการตั้งค่า:

<div id="InputBody">
<div class="box">
    <span id="StartDate">
        <input type="text" id="control1">
    </span>
    <span id="Result">
        <input type="text" id="control2">
    </span>
    <span id="SelectList">
        <select>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
        </select>
    </span>
</div>
<div class="box">
    <span id="StartDate">
        <input type="text" id="control1">
    </span>
    <span id="Result">
        <input type="text" id="control2">
    </span>
    <span id="SelectList">
        <select>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
        </select>
    </span>
</div>

แล้วสคริปต์:

$('#InputBody')
    // find all div containers with class = "box"
    .find('.box')
    .each(function () {
        console.log("child: " + this.id);

        // find all spans within the div who have an id attribute set (represents controls we want to capture)
        $(this).find('span[id]')
        .each(function () {
            console.log("span: " + this.id);

            var ctrl = $(this).find(':input:visible:first');

            console.log(this.id + " = " + ctrl.val());
            console.log(this.id + " SelectedText = " + ctrl.find(':selected').text());

        });

คำตอบ:


167

คุณสามารถทำได้:

if( ctrl[0].nodeName.toLowerCase() === 'input' ) {
    // it was an input
}

หรือสิ่งนี้ซึ่งช้ากว่า แต่สั้นกว่าและสะอาดกว่า:

if( ctrl.is('input') ) {
    // it was an input
}

หากคุณต้องการเจาะจงมากขึ้นคุณสามารถทดสอบประเภท:

if( ctrl.is('input:text') ) {
    // it was an input
}

2
ฉันต้องเพิ่ม jquery syntax $ (element) .is ('input') เพื่อให้มันใช้งานได้ แต่โดยรวมแล้วดีมาก
สังเกตการณ์

28

หรือคุณสามารถดึงคุณสมบัติ DOM ด้วยไฟล์ .prop

นี่คือโค้ดตัวอย่างสำหรับกล่องเลือก

if( ctrl.prop('type') == 'select-one' ) { // for single select }

if( ctrl.prop('type') == 'select-multiple' ) { // for multi select }

สำหรับกล่องข้อความ

  if( ctrl.prop('type') == 'text' ) { // for text box }

สิ่งนี้ทำงานได้อย่างมีเสน่ห์ด้วยฟังก์ชัน jQuery ใหม่ prop () ขอบคุณ.
Thomas.Benz

8

หากคุณต้องการตรวจสอบประเภทคุณสามารถใช้ฟังก์ชัน. is () ของ jQuery

เช่นในกรณีของฉันฉันใช้ด้านล่าง

if($("#id").is("select")) {
 alert('Select'); 
else if($("#id").is("input")) {
 alert("input");
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.