이 코드에서는 Bind 메서드를 무시했습니다. of Api is bind (type,[data],fn)
fn을 단순 함수로 잘못 간주해서 이 코드는 로딩 시 fn을 한 번 실행하게 됩니다.
작성 형식의 실수입니다. .이유를 아시는 분이 조언을 해주셨으면 좋겠습니다.
2 변수 범위의 문제 (jquery의 문제는 아닌 것 같습니다. js와 .net의 차이입니다..)
function text() {
2 for (var i = 0; i < 3; i ) {
3 $("
삭제 ").attr({ id: "hr_" i, href: "javascript:;" }).addClass("btnCss").bind("click", function () { tes(i) } ).appendTo(".div_list");
4 }
5 }
6 function tes(id) {
7 Alert(id); 8 }
해당 ID를 알려주는 기능입니다. 결과적으로는
이상은 제가 jquery를 처음 사용하면서 겪게 되는 문제들입니다. 여기까지만 두고 성장 과정으로 생각하겠습니다. 🎜>
첫 번째 질문
$('#btnLoad').bind('click', GetProduct)
바인딩 이벤트는 추가 후 함수 및 GetProduct()에 연결된다는 점을 기억하세요. 괄호를 사용하면 함수의 반환 값을 가져옵니다. 그리고 GetProduct의 반환 값은 분명히 함수가 아닙니다.
$("#btnLoad").bind("click",GetProduct())
는 다음과 같이 변경됩니다.
$("#btnLoad" ).bind("click",GetProduct)
해 보세요.
GetProduct()는 함수를 실행한 다음 값을 반환하지만 반환된 값은 fn 유형이 아닙니다.
두 번째 문제
사실 .NET에도 존재하는 문제입니다. 클로저에서 얻은 것은 i 변수의 주소이고, 이후에도 마찬가지입니다. 이 주소에 액세스하면 얻은 값도 항상 변경되므로 모든 테스트는 i 변수의 마지막 값인 3을 사용합니다.
이 문제는 다음과 같이 해결됩니다(코드를 단순화합니다).
for (var i = 0; i < 3; i ) {
(function(i) {
$('
삭제').appendTo('.div_list').bind(' click', function() { tes(i) });
})(i);
}
이런 식으로 작성하는 원리를 이해하지 못해도 상관없습니다. 이 형태를 먼저 기억하시면, 앞으로도 비슷한 문제에 직면하게 될 것입니다. 즉, (function() { xxx })(); 실제로는 매우 간단합니다. 함수를 전달할 때 기본 유형 변수인 i가 값으로 전달됩니다. 즉, i의 현재 값이 이 함수에 복사되므로 이 익명 함수가 호출될 때마다 i가 전달됩니다.
세 번째 질문
에 대해 서로 독립적이며 외부의 영향을 받지 않습니다. a가 href 속성을 제공하지 않으면 href가 현재 페이지의 주소로 기본 설정되므로 이후로 점프하게 됩니다. 클릭. 따라서 인터넷에는 다음과 같은 여러 가지 인기 있는 처리 방법이 있습니다.
1.
dfa2.
dfa 3.
dfa