2010-01-05 6 views
0

난 다음 오류가 다음 자바 스크립트 함수 실행시 :jQuery/JavaScript 함수에서이 오류가 발생하는 이유는 무엇입니까?

'2' is null or not an object.

txtRawCardData 요소에서 입력 I가 문자열 배열로 분할 ^ 문자를 포함하는 문자열이다.

업데이트 난 내가 파이어 폭스 3.5.6을 실행할 때이 오류가 발생하지 않는 인터넷 익스플로러 7에서 내 jQuery 코드를 실행할 때만이 오류가 발생합니다.

업데이트 2 :

이 오류는 내가 발사에서 모든 ASP.NET CustomValidator 컨트롤에 대해 쓴 자바 스크립트 기능을 방지한다.

샘플 입력 :이 오류가 발생했습니다 왜

%B1234123412341234^JOHNSON/JOCKO^123412341234570000000?;1234123412341234=123443211234567?

function ProcessCCInfo() { 
    var rawData = $('#txtRawCardData').val(); 
    rawData = rawData.replace('\n\r', '');     
    var CCArray = rawData.split('^'); 

    //format the card holder name 
    var NameArray = CCArray[1].split('/'); 
    var CCName = NameArray[1] + ' ' + NameArray[0]; 

    var CCNumber = CCArray[0].replace('%B', ''); 

    var CCExpiration = CCArray[2].substring(0,4) //this is the line generating the error! 
    var FormattedDate = CCExpiration.substring(2,4) + '/' + CCExpiration.substring(0,2); 

    $('#spanCardHolderName').attr('innerHTML', CCName); 
    $('#spanCCNumber').attr('innerHTML', CCNumber); 
    $('#spanCCExpirationDate').attr('innerHTML', FormattedDate); 

    setTimeout("$('#txtCustomerId').focus()", 1000); 
} 

누구나 알아?

+1

와 정규 표현식을 사용하여 대체 할 ... rawData = rawData.replace('\n\r', '');는 첫 번째 '\ n 개의 \ r에'가 발생하지 그들 모두를 대체 할 기억 CCArray [2]가 null 또는 비어 있지 않다는 것을 확인했다고 가정합니다. –

+0

@Nathan Taylor -'CArx [2]'는'CCExpiration' 변수를 채우고 있기 때문에 값을 포함하고 있습니다. –

+0

@Michael (가짜 카드 데이터를 사용하여) 죽는 입력의 예를 보여줄 수 있습니까? 내 대답에 넣은 함수에서 그 입력을 시도해 볼 수 있습니까? 여전히 문제가 있다면 알려주시겠습니까? –

답변

0

다음 코드는 아마 당신의 입력 값이 잘못, 파이어 버그 콘솔에서 작동합니다

function readCard(){ 
    var rawData = '%B13241234134^first/last^201111'; 
    rawData = rawData.replace('\n\r', '');     
    var CCArray = rawData.split('^'); 

    //format the card holder name 
    var NameArray = CCArray[1].split('/'); 
    var CCName = NameArray[1] + ' ' + NameArray[0]; 

    var CCNumber = CCArray[0].replace('%B', ''); 

    var CCExpiration = CCArray[2].substring(0,4) 

return [CCName, CCNumber, CCExpiration]} 

readCard() 
0

이 같은 문제가 발생하면, 당신의 가정을 확인해보십시오. 중간 값 중 일부를 인쇄하여 자신이 생각하는 것임을 확인하십시오 (또는 alert()). 짧은 예제로 잘라내어 어떤 종류의 입력이 작동하는지 테스트 할 수 있습니다.

다음은 예입니다.

function test(rawData) { 
    rawData = rawData.replace('\n\r', '');     
    var CCArray = rawData.split('^'); 

    //format the card holder name 
    var NameArray = CCArray[1].split('/'); 
    var CCName = NameArray[1] + ' ' + NameArray[0]; 

    var CCNumber = CCArray[0].replace('%B', ''); 

    var CCExpiration = CCArray[2].substring(0,4) //this is the line generating the error! 
    var FormattedDate = CCExpiration.substring(2,4) + '/' + CCExpiration.substring(0,2); 

    return CCName + " " + CCNumber + " " + CCExpiration + " " + FormattedDate; 
} 

을 이제 방화범 또는 웹킷 관리자 나 SpiderMonkey를하거나 인터넷 익스플로러 8 자바 스크립트 디버거 나 다른 자바 스크립트를 읽기 평가에 : 그것이 작동하는 경우에 나는보기 위해, 함수에서 바로 텍스트 처리를 추출했습니다 나는 당신이 두 ^ 문자가없는 문자열의 어떤 종류를 전달했다 추측 것, 그래서

> test("12345^Last/First^0102") 
"First Last 12345 0102 02/01" 
> test("12345^Last/First") 
TypeError: Result of expression 'CCArray[2]' [undefined] is not an object. 

: 당신이 찾을 수 -print 루프는이 기능을 사용해, 다른 입력을 테스트 할 수 그 안에. 요소를 꺼낸 직후 alert(rawData)을 붙인 다음 오류가 발생한 행 바로 앞에 alert(CCArray)을 붙이면 값이 무엇인지 알 수있게되어 어떤 일이 일어나는지 파악할 수 있습니다.

+0

@Brian - 'attr' 문에서 CCArray 값으로 코드와 로컬 변수를 수정했으며 모두 값을 포함하고있었습니다. –

0

모두가 글로벌 플래그

rawData = rawData.replace(/(\r\n|[\r\n])/g, ''); 
관련 문제