jquery รับองค์ประกอบฟอร์มทั้งหมด: อินพุตพื้นที่ข้อความและเลือก


108

มีวิธีง่ายๆ (โดยไม่ต้องแสดงรายการทั้งหมดแยกกัน) ใน jquery เพื่อเลือกองค์ประกอบฟอร์มทั้งหมดและเฉพาะองค์ประกอบของรูปแบบ

ฉันไม่สามารถใช้ลูก () ฯลฯ เนื่องจากแบบฟอร์มมี HTML อื่น

เช่น:

$("form").each(function(){
    $(this, "input, textarea, select");
});

คำตอบ:


179

แก้ไข:ตามที่ระบุไว้ในความคิดเห็น ( Mario Awad & Brock Hensley ) ใช้.findเพื่อรับเด็ก ๆ

$("form").each(function(){
    $(this).find(':input') //<-- Should return all input elements in that specific form.
});

แบบฟอร์มยังมีคอลเลกชันองค์ประกอบบางครั้งสิ่งนี้แตกต่างจากเด็ก ๆ เช่นเมื่อแท็กฟอร์มอยู่ในตารางและไม่ได้ปิด


อาจเป็น:ตัวเลือกอินพุตคือสิ่งที่คุณต้องการ

$ ("form") each (function () {$ (': input', this) // <- ควรส่งคืนองค์ประกอบอินพุตทั้งหมดในรูปแบบเฉพาะนั้น});

ตามที่ระบุไว้ในเอกสาร

เพื่อให้ได้ประสิทธิภาพสูงสุดเมื่อใช้: อินพุตเพื่อเลือกองค์ประกอบก่อนอื่นให้เลือกองค์ประกอบโดยใช้ตัวเลือก CSS แท้จากนั้นใช้. filter (": input")

คุณสามารถใช้ดังต่อไปนี้

$("form").each(function(){
    $(this).filter(':input') //<-- Should return all input elements in that specific form.
});


3
ขอบคุณแม้ว่าหลังจากอ่าน: api.jquery.com/input-selectorประสิทธิภาพเป็นปัญหาแล้วฉันก็อาจแสดงรายการได้เช่นกัน แม้ว่าจะเป็นไปได้ก็ตาม
John Magnolia

8
มันเป็นแค่ฉันหรือไม่ได้ผลselect? แก้ไข: ไม่เป็นไรใช้ได้กับการเลือกถ้าฉันใช้find(':input')
Brock Hensley

1
คุณต้องใช้ "find" แทน "filter" ที่นี่เนื่องจาก "filter" ไม่สามารถทำงานกับองค์ประกอบเดียวได้ (ในกรณีนี้คือองค์ประกอบ "this") การใช้ "ตัวกรอง" คุณจะไม่สามารถเลือกองค์ประกอบฟอร์มใด ๆ และไม่เพียง แต่ "เลือก" องค์ประกอบเท่านั้น ขอบคุณสำหรับ @Brock Hensley ที่ชี้ให้เห็นสิ่งนี้
Mario Awad

รูปแบบขนาดใหญ่เป็นอย่างไร? ฉันมีรูปร่างขนาดใหญ่ที่มีองค์ประกอบมากกว่า 4000+ รายการและตัวเลือกนี้ช้ามาก ในข้อกำหนดเขียนไว้ว่า: อินพุตไม่ใช่เบราว์เซอร์ที่ปรับให้เหมาะสมโดย CSS3 ดังนั้นฉันจึงไม่ทำงาน: / ความคิดอื่น ๆ ?
Vasil Popov

@VasilPopov ข้างต้นอาจจะช้าเกินไปสำหรับคุณ คุณสามารถลองวิธีแก้ปัญหาได้สองวิธีไม่ว่าจะด้วยวิธีใดก็ตามที่คุณต้องจัดกลุ่มองค์ประกอบให้น้อยลงแล้วเลือก
Selvakumar Arumugam

52

รหัสด้านล่างช่วยในการรับรายละเอียดขององค์ประกอบจากรูปแบบเฉพาะด้วยรหัสแบบฟอร์ม

$('#formId input, #formId select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

โค้ดด้านล่างช่วยให้รับรายละเอียดขององค์ประกอบจากทุกรูปแบบซึ่งอยู่ในหน้าโหลด

$('form input, form select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

โค้ดด้านล่างช่วยให้รับรายละเอียดขององค์ประกอบที่อยู่ในหน้าโหลดแม้ว่าจะไม่ได้วางองค์ประกอบไว้ในแท็กก็ตาม

$('input, select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

หมายเหตุ:เราเพิ่มชื่อแท็กองค์ประกอบเพิ่มเติมที่เราต้องการในรายการวัตถุดังต่อไปนี้

Example: to get name of attribute "textarea",

$('input, select, textarea').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

เหตุใดจึงใช้ค่าและตัวเลือกทั้งหมดขององค์ประกอบที่เลือกแทนที่จะให้ค่าของสิ่งที่เลือกหรือว่างเปล่า เหรอ?
user2906838

11

หากคุณมีประเภทเพิ่มเติมให้แก้ไขตัวเลือก:

var formElements = new Array();
$("form :input").each(function(){
    formElements.push($(this));
});

ตอนนี้องค์ประกอบฟอร์มทั้งหมดอยู่ในอาร์เรย์ formElements


7

สำหรับบันทึก : ตัวอย่างข้อมูลต่อไปนี้สามารถช่วยให้คุณได้รับรายละเอียดเกี่ยวกับอินพุตพื้นที่ข้อความเลือกปุ่มแท็กผ่านชื่อชั่วคราวเมื่อวางเมาส์เหนือรายการเหล่านี้

ใส่คำอธิบายภาพที่นี่

$( 'body' ).on( 'mouseover', 'input, textarea, select, button, a', function() {
    var $tag = $( this );
    var $form = $tag.closest( 'form' );
    var title = this.title;
    var id = this.id;
    var name = this.name;
    var value = this.value;
    var type = this.type;
    var cls = this.className;
    var tagName = this.tagName;
    var options = [];
    var hidden = [];
    var formDetails = '';

    if ( $form.length ) {
        $form.find( ':input[type="hidden"]' ).each( function( index, el ) {
            hidden.push( "\t" + el.name + ' = ' + el.value );
        } );

        var formName = $form.prop( 'name' );
        var formTitle = $form.prop( 'title' );
        var formId = $form.prop( 'id' );
        var formClass = $form.prop( 'class' );

        formDetails +=
            "\n\nFORM NAME: " + formName +
            "\nFORM TITLE: " + formTitle +
            "\nFORM ID: " + formId +
            "\nFORM CLASS: " + formClass +
            "\nFORM HIDDEN INPUT:\n" + hidden.join( "\n" );
    }

    var tempTitle =
        "TAG: " + tagName +
        "\nTITLE: " + title +
        "\nID: " + id +
        "\nCLASS: " + cls;

    if ( 'SELECT' === tagName ) {
        $tag.find( 'option' ).each( function( index, el ) {
            options.push( el.value );
        } );

        tempTitle +=
            "\nNAME: " + name +
            "\nVALUE: " + value +
            "\nTYPE: " + type +
            "\nSELECT OPTIONS:\n\t" + options;

    } else if ( 'A' === tagName ) {
        tempTitle +=
            "\nHTML: " + $tag.html();

    } else {
        tempTitle +=
            "\nNAME: " + name +
            "\nVALUE: " + value +
            "\nTYPE: " + type;
    }

    tempTitle += formDetails;

    $tag.prop( 'title', tempTitle );
    $tag.on( 'mouseout', function() {
        $tag.prop( 'title', title );
    } )
} );

ฟังก์ชั่นเยี่ยม! ขอบคุณ
Mohamad Hamouday

6

jQuery เก็บการอ้างอิงถึงองค์ประกอบฟอร์ม vanilla JS และสิ่งนี้มีการอ้างอิงถึงองค์ประกอบลูกทั้งหมดของแบบฟอร์ม คุณสามารถคว้าข้อมูลอ้างอิงและดำเนินการต่อ:

var someForm = $('#SomeForm');

$.each(someForm[0].elements, function(index, elem){
    //Do something here.
});

5

ฟังก์ชั่นjQuery serializeทำให้ง่ายต่อการรับองค์ประกอบฟอร์มทั้งหมด

การสาธิต: http://jsfiddle.net/55xnJ/2/

$("form").serialize(); //get all form elements at once 

//result would be like this:
single=Single&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio1

5

นี่เป็นฟังก์ชั่นโปรดของฉันและมันก็เป็นเสน่ห์สำหรับฉัน!

ส่งคืนอ็อบเจ็กต์พร้อมข้อมูลอินพุตเลือกและ textarea

และพยายามตั้งชื่อวัตถุโดยมองหาชื่อองค์ประกอบอื่น Id else class

var All_Data = Get_All_Forms_Data();
console.log(All_Data);

ฟังก์ชัน:

function Get_All_Forms_Data(Element)
{
    Element = Element || '';
    var All_Page_Data = {};
    var All_Forms_Data_Temp = {};
    if(!Element)
    {
        Element = 'body';
    }

    $(Element).find('input,select,textarea').each(function(i){
        All_Forms_Data_Temp[i] = $(this);
    });

    $.each(All_Forms_Data_Temp,function(){
        var input = $(this);
        var Element_Name;
        var Element_Value;

        if((input.attr('type') == 'submit') || (input.attr('type') == 'button'))
        {
            return true;
        }

        if((input.attr('name') !== undefined) && (input.attr('name') != ''))
        {
            Element_Name = input.attr('name').trim();
        }
        else if((input.attr('id') !== undefined) && (input.attr('id') != ''))
        {
            Element_Name = input.attr('id').trim();
        }
        else if((input.attr('class') !== undefined) && (input.attr('class') != ''))
        {
            Element_Name = input.attr('class').trim();
        }

        if(input.val() !== undefined)
        {
            if(input.attr('type') == 'checkbox')
            {
                Element_Value = input.parent().find('input[name="'+Element_Name+'"]:checked').val();
            }
            else if((input.attr('type') == 'radio'))
            {
                Element_Value = $('input[name="'+Element_Name+'"]:checked',Element).val();
            }
            else
            {
                Element_Value = input.val();
            }
        }
        else if(input.text() != undefined)
        {
            Element_Value = input.text();
        }

        if(Element_Value === undefined)
        {
            Element_Value = '';
        }

        if(Element_Name !== undefined)
        {
            var Element_Array = new Array();
            if(Element_Name.indexOf(' ') !== -1)
            {
                Element_Array = Element_Name.split(/(\s+)/);
            }
            else
            {
                Element_Array.push(Element_Name);
            }

            $.each(Element_Array,function(index, Name)
            {
                Name = Name.trim();
                if(Name != '')
                {
                    All_Page_Data[Name] = Element_Value;
                }
            });
        }
    });
    return All_Page_Data;
}

ดี แต่มีจุดบกพร่องเล็กน้อยใน "Element_Value = jQuery ('input [name ="' + Element_Name + '"]: checked'). val ();" Element_Name อาจเป็นรหัสโหนดหรือคลาสซึ่งในกรณีนี้จะไม่พบองค์ประกอบ
Rafael Werlang

1
ถูกต้องตอนนี้ฉันได้แก้ไขแล้ว!
Mohamad Hamouday

4
var $form_elements = $("#form_id").find(":input");

ตอนนี้องค์ประกอบทั้งหมดรวมถึงปุ่ม submit อยู่ในตัวแปร $ form_elements


2
คุณเข้าถึงได้อย่างไร?
Ngenazy


1

ลองใช้ฟังก์ชันนี้

function fieldsValidations(element) {
    var isFilled = true;
    var fields = $("#"+element)
        .find("select, textarea, input").serializeArray();

    $.each(fields, function(i, field) {
        if (!field.value){
            isFilled = false;
            return false;
        }
    });
    return isFilled;
}

และใช้เป็น

$("#submit").click(function () {

    if(fieldsValidations('initiate')){
        $("#submit").html("<i class=\"fas fa-circle-notch fa-spin\"></i>");
    }
});

สนุก :)


0

ลองทำสิ่งนี้:

<form action="/" id="searchForm">
<input type="text" name="s" placeholder="Search...">
<input type="submit" value="Search">
</form>
<!-- the result of the search will be rendered inside this div -->
<div id="result"></div>

<script>
// Attach a submit handler to the form
$( "#searchForm" ).submit(function( event ) {

  // Stop form from submitting normally
event.preventDefault();

// Get some values from elements on the page:
var $form = $( this ),
term = $form.find( "input[name='s']" ).val(),
url = $form.attr( "action" );

// Send the data using post
var posting = $.post( url, { s: term } );

// Put the results in a div
posting.done(function( data ) {
  var content = $( data ).find( "#content" );
  $( "#result" ).empty().append( content );
    });
  });
</script>

หมายเหตุการใช้อินพุต []


ดูเหมือนจะไม่ได้รับ textareas หรือ selects
pcarvalho

0

อินพุตทั้งหมด:

var inputs = $("#formId :input");

ปุ่มทั้งหมด

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