• 쇼핑몰
  • 커뮤니티
  • 북마크

질문과 답변 (채택게시판)

jQuery $ (this) .attr ( "id")이 작동하지 않습니다.

총 채택 포인트 10 포인트
채택된 회원에게 주는 후원 포인트 8 포인트
채택 후 작성자(안졸리나졸리나) 회수 포인트 2 포인트

본문

제목에서 알 수 있듯이 요소의 id 특성을 얻으려고 할 때 "정의되지 않음"을 계속합니다. 기본적으로 원하는 것은 값이 "other"일 때 요소를 입력 상자로 바꾸는 것입니다.

다음은 코드입니다.

function showHideOther(obj){ 

    var sel = obj.options[obj.selectedIndex].value;
    var ID = $(this).attr("id");

    alert(ID);


    if(sel=='other'){ 

        $(this).html("<input type='text' name='" + ID + "' id='" + ID + "' />");

    }else{
        $(this).css({'display' : 'none'});
    }
}  

HTML :

          <span class='left'><label for='race'>Race: </label></span>
          <span class='right'><select name='race' id='race' onchange='showHideOther(this);'>
            <option>Select one</option>
            <option>one</option>
            <option>two</option>
            <option>three</option>
            <option value="other">Other</option>
          </select>
          </span>

내가 뭘 잘못하고있는 걸까요?

profile_image
포인트 5,294
경험치 319
[레벨 2] - 진행률 30%
가입일 :
2018-08-10 14:32:50

댓글목록 3

아름다운별님의 댓글

profile_image
변화
var ID = $(this).attr("id"); 에
var ID = $(obj).attr("id");
또한 jQuery 이벤트 핸들러를 사용하도록 변경할 수 있습니다.
$('#race').change(function() {
    var select = $(this);
    var id = select.attr('id');
    if(select.val() == 'other') {
        select.replaceWith("<input type='text' name='" + id + "' id='" + id + "' />");
    } else {
        select.hide();
    }
});

축하합니다. 첫댓글 포인트 88포인트를 획득하였습니다.

피에이치피님의 댓글

profile_image
당신 this이 매개 변수를 사용해야 할 때 함수에서 사용하는 것.
콜백에서는 $ (this)를 ...와 같은 선택 항목에서만 사용합니다.
$('a').click(function() {
   alert($(this).href);
})

결론적으로 (코드 예제를 사용하여) 적절한 방법은이 작업을 수행하는 것입니다.
obj.attr('id');

시베리안허숙희님의 댓글

채택
profile_image
함수가 호출되는 방식 (즉, 함수 변수에 대한 간단한 호출) this때문에 전역 객체 ( window브라우저의 별칭)가 있습니다. obj매개 변수를 대신 사용하십시오 .

또한, jQuery 오브젝트를 작성하고 attr()요소 ID를 얻기 위해 메소드를 사용하는 것은 비효율적이며 불필요합니다. id모든 브라우저에서 작동 하는 요소의 속성 만 사용하면 됩니다.
function showHideOther(obj){ 
    var sel = obj.options[obj.selectedIndex].value;
    var ID = obj.id;

    if (sel == 'other') { 
        $(obj).html("<input type='text' name='" + ID + "' id='" + ID + "' />");
    } else {
        $(obj).css({'display' : 'none'});
    }
}