jQuery-입력 요소가 텍스트 상자인지 또는 선택 목록인지 확인


90

jQuery의 : input 필터가 반환하는 요소가 텍스트 상자인지 아니면 선택 목록인지 어떻게 알 수 있습니까?

각각 다른 동작을 원합니다 (텍스트 상자는 텍스트 값을 반환하고 선택은 키와 텍스트를 모두 반환)

설정 예 :

<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 구문 $ (element) .is ( 'input')을 추가해야 작동하지만 모두 훌륭했습니다.
Observer

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

유형 만 확인하고 싶다면 jQuery의 .is () 함수를 사용할 수 있습니다.

아래에서 사용한 제 경우처럼

if($("#id").is("select")) {
 alert('Select'); 
else if($("#id").is("input")) {
 alert("input");
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.