배경 : Google 웹 앱은 jquery.constrain.js 플러그인을 사용하여 일부 텍스트 상자의 데이터 입력을 처리하여 유효한 문자 만 추가 할 수 있도록합니다. 이 플러그인은 정규 표현식, 화이트리스트/블랙리스트 문자 등을 사용하여 데이터에 대한 다양한 제약을 허용합니다. 오늘까지는이 플러그인의 1.0 릴리스를 수정하지 않았습니다.JQuery "Constrain"플러그인 - 이상한 자바 스크립트 오류
몇일 전에 일부 텍스트 상자에 잘못된 데이터 입력이 허용되었음을 알았습니다. 예를 들어 숫자 전용 텍스트 상자에는 알파 문자 등이 허용됩니다. 또한 "개체가이 속성 또는 메서드를 지원하지 않습니다."라는 자바 스크립트 오류가 표시되었습니다. 나는 jquery.constrain 플러그인의 다음 함수를 추적했다. 문자 및 정규식
- 항목 개의 문자열 속성 목적 : 코드 블록을 통해
function match(item, input, e) { var arr = item.chars.split(""); for (var i in arr) { var token = arr[i]; if (token.charCodeAt(0) == e.which) { return true; } } if (item.regex) { var re = new RegExp(item.regex); if (re.test(String.fromCharCode(e.which))) { return true; } } return false; };
디버깅, I는 다음의 결정은 실패시 빈 문자열 ("")입니다.
- arr, 결과는 입니다. item.chars.split ("")은 예상대로 빈 배열입니다.
여기가 이상합니다. arr이 빈 배열 인 경우에도 for 루프는 에 유효한 값을 할당합니다. 값은 "제거"입니다. 그래서 우리는 그 고리에 빠져 들었습니다. 토큰은 분명히 null입니다. 왜냐하면 arr [ "remove"]가 null이기 때문입니다. 그래서 token.charCodeAt (0)이 던졌습니다. 다음과 같이
내가 루프에 대한 주위의 경우 문을 추가하여 오류를 수정 : 그러나 if (arr.length > 0) {
for (var i in arr) {
var token = arr[i];
if (token.charCodeAt(0) == e.which) {
return true;
}
}
}
, 나는 완전히이도 필요이었다 이유에 당황하고있어 -이 IE의 버그입니다 , 플러그인의 버그, 또는 내가 방금 앱을 컴파일 할 때 잘못 숨 쉬고 있습니까?
네, 그건 그 것이었다. JQuery는 Array.prototype을 수정 한 다음 좀 더 추가했습니다. 나는 플러그인 작성자에게 알려주고 로컬 버전도 수정하도록 할 것이다. – GalacticCowboy