2012-08-29 2 views
0

양식 참여를 추적하는 데 사용하는 javascript 스 니펫이 있습니다. 스크립트에서 두 개의 함수에 객체를 전달하기 위해 $ (this)를 사용하지만 크롬의 "길이가 정의되지 않은 속성을 읽을 수 없습니다"라는 이유로 다음 몇 줄의 코드가 실행되지 않습니다. 왜 $를 사용할 수 없습니까?) 참조 더 이상

$('select').blur(function() { 

       var input_category = get_input_category($(this)); 

       var form_identifier = get_form_identifier($(this)); 

       if($(this).attr('name').length) { 
// This is where I get the error ^^ 
        var object_identifier = $(this).attr('name'); 
       } 
       else if($(this).attr('id').length) { 
        var object_identifier = $(this).attr('id'); 
       } 
       else if($(this).attr('class').length) { 
        var object_identifier = $(this).attr('class'); 
       } 
       else { 
        var object_identifier = null; 
       } 
}); 

편집 :?. 선택 상자가 부착 된 이름 값이없는

     <select type="select"> 
          <option value="volvo">Volvo</option> 
          <option value="saab">Saab</option> 
          <option value="mercedes">Mercedes</option> 
          <option value="audi">Audi</option> 
         </select> 

그러나이없는 경우 내 스크립트가 보이는 것이 아닙니다 즉? 이름을 계속 입력하고 싶습니다. 오류가 발생하지 않고 속성을 확인하려면 어떻게해야합니까?

+4

, 나에게 보인다 정의되지 않음. 'alert ($ (this) .attr ('name'))'을 추가하여 원하는 출력을 리턴하는지 점검하십시오. –

+1

정의되지 않은 부분은 * attr ('name') *에서옵니다. – McGarnagle

+0

흐리게 처리하고있는 '선택'에 이름 속성이 정의되어 있습니까? – Shmiddty

답변

2

Vega에서 볼 수 있듯이 문제는 attr('name') 값에 있습니다.

길이를 확인할 수있는 객체가 없을 때 오류가 발생하기 때문에 객체의 길이를 검사하여 정의되어 있는지 확인하지 마십시오.

은 단순히 정의와 일반적인 JS 패턴을 사용하여 비어 있지 않은 값을 가지고있어 확인 :

if ($(this).attr('name')) 

대신 주

if ($(this).attr('name').length) 

의 첫 번째 테스트 검사는이 ""이 아니라고. 따라서 객체가 정의되어 있고 모두 ""이 아닌지를 확인할 이유가 절대적으로 없습니다. 아래 시도 ... 몇 가지 조건 검사를 추가해야처럼 당신이 한 말에서

+0

글쎄, 나는 그가'' ''(예 : name =' ')뿐만 아니라'undefined'인지 확인하고 싶다고 생각한다. –

+0

@Vega이 테스트는 그것을한다. 더 복잡한 작업을 할 필요가 없으며 단순한 평상시 테스트를 사용하십시오. –

+0

네 말이 맞아 .. 젠장. 놓쳤다. –

1

, 그것은

는 대부분의 경우`$ (이) .attr ('이름')``반환
$('select').blur(function() { 

    var $this = $(this); 
    var input_category = get_input_category($this); 
    var form_identifier = get_form_identifier($this); 

    var object_identifier = null; 
    if(this.name) { 
     object_identifier = this.name 
    } else if(this.id) { 
     object_identifier = this.id 
    } else if(this.className) { 
     object_identifier = this.className 
    } 
});