jQuery - Bestimmen Sie, ob das Eingabeelement ein Textfeld oder eine Auswahlliste ist


87

Wie würde ich feststellen, ob das von einem: Eingabefilter in jQuery zurückgegebene Element ein Textfeld oder eine Auswahlliste ist?

Ich möchte für jedes ein anderes Verhalten haben (Textfeld gibt Textwert zurück, Auswahl gibt sowohl Schlüssel als auch Text zurück)

Beispielaufbau:

<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>

und dann das Skript:

$('#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());

        });

Antworten:


167

Sie könnten dies tun:

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

oder das, was langsamer, aber kürzer und sauberer ist:

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

Wenn Sie genauer sein möchten, können Sie den Typ testen:

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

2
Ich musste die jquery-Syntax $ (element) .is ('input') hinzufügen, damit es funktioniert, aber alles in allem großartig.
Beobachter

28

Alternativ können Sie DOM-Eigenschaften mit abrufen .prop

Hier ist ein Beispielcode für das Auswahlfeld

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

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

für Textfeld

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

Dies funktioniert wie ein Zauber mit der neuen jQuery-Funktion prop (). Vielen Dank.
Thomas.Benz

6

Wenn Sie nur den Typ überprüfen möchten, können Sie die .is () -Funktion von jQuery verwenden.

Wie in meinem Fall, den ich unten verwendet habe,

if($("#id").is("select")) {
 alert('Select'); 
else if($("#id").is("input")) {
 alert("input");
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.