2012-12-04 4 views
0

이 함수의 변수는 edit() 함수를 호출 할 때마다 덮어 쓰여지고있는 것으로 보입니다.마지막 호출의 내부 함수 참조 매개 변수

function edit(el) 
{ 
    $edit_img = $(el); 
    $btn = $('<img width="15" height="15" src="images/add.png">'); 

    $edit_confirm = $edit_img.parent(); 

    $edit_confirm.append($btn); 

    function restore_span() 
    { 
     $edit_img.show(); 

     $btn.remove(); 
    } 

    $btn.click(restore_span); 

    $edit_img.hide(); 
} 

편집 기능이 온 클릭 핸들러에서 호출 :

<img src = "images/edit-icon.png" width = "15px" height = "15px" onclick="edit(this)" /> 

최근 가장 만들어진 제거됩니다 전용 이미지 위와 같은 여러 이미지를 편집()를 호출.

이 동작을 수정하려면 어떻게해야합니까?

답변

2

PHP와 달리 JavaScript의 변수는 블록이나 함수에 대해 암시 적으로 로컬이 아닙니다.

function edit(el) { 
    var $edit_img = $(el), // use them with comma 
     $btn = $('<img width="15" height="15" src="images/add.png">'); 
    var $edit_confirm = $edit_img.parent(); // or just multiple times 
    $edit_confirm.append($btn); 
    $btn.click(function restore_span() { 
     $edit_img.show(); 
     $btn.remove(); 
    }); 
    $edit_img.hide(); 
} 
+0

감사 : 기능 영역에 국부적으로는 var statements 사용할수록

변수를 선언. jQuery를 배우기 전에 항상 var를 사용했지만, 그 이후로 나는 그 일을 완전히 잊었습니다. – mnn

+0

jQuery를 배운 다음에는 :-) – Bergi

4

사용 (다른 변수도 등) 대신 $btnvar $btn

당신이 var $btn 쓰기 - 당신이 때 var하지 않고 지역 변수 를 만들 -

그래서 귀하의 경우 각 시간을 대체 전역 이러한 변수 (예 : 복원 기능에 사용되는 $edit_img)