2012-01-19 2 views
2

http://pastebin.com/1MGTtzij 내 전체 HTML 문서이며, 아래의 짧은 버전입니다 :JQuery와 클릭() 이벤트가 발생 라이브() 여기

$(document).ready(function() { 
     $("#myDiv").append($("<input />", { 
          type : "button", 
          id : "myButton1", 
          value : "Click me first!" 
         })); 
     $("#myButton1").live("click", function() { 
      var a = 1; 
      $("#myButton2").click(function() { 
       alert(a); 
      }); 
     }); 
    }); 

HTML 코드와 :

<div id="myDiv"></div> 
    <input type="button" id="myButton2" value="Click me!" /> 

페이지가 멈추고로드가 완전히 끝나면 버튼 2가 표시됩니다. 나를 먼저 클릭하십시오!나를 클릭하십시오!, 나를 따라 해 :

  1. 클릭 나를 먼저 클릭하십시오! - 아무 일도 발생하지 않음 - OK
  2. 클릭 나를 클릭하십시오! - 알림 1 - 확인
  3. 클릭 저를 먼저 클릭하십시오! - 아무 일도 발생하지 않음 - OK
  4. 클릭 나를 클릭하십시오! - 알림 1 - 알림 1 ????????????
    클릭하면 알 수 있습니다 먼저 클릭하십시오! N 번, (N + 1) 개의 경고를 받게됩니다. 어떻게 해결할 수 있습니까 ??

감사합니다.

답변

2

클릭 핸들러가 버튼 1에서 호출 될 때마다 버튼 2에 새 클릭 핸들러가 추가됩니다.

$("#myButton1").live("click", function() { 
    var a = 1; 
    // Don't add a new handler here. Move this outside of the `live` call 
    $("#myButton2").click(function() { 
     alert(a); 
    }); 
}); 

나는 variable이 두 버튼의 클릭 핸들러에 의해 액세스 할 수 있도록 이동, 외부 클릭 처리기 설치를 이동했습니다. 자세한 내용은 example을 참조하십시오.

+0

제쳐두고 :'.live()'는 jQuery 1.7+에서 더 이상 사용되지 않습니다. jQuery 버전이 1.7 이상이면'.on()'을 사용하도록 전환해야한다. 그것이 아니라고해도, .delegate()는 오랫동안 많이 멸시당한 (그러나 많이 사용되는 !!!)'.live()'의 우월한 대안으로 간주되어 왔습니다. –

0

myButton1을 클릭 할 때마다 새 .click 처리기를 myButton2에 추가합니다.

이 방법으로 실제로 수행하려는 경우 수행 할 수있는 것은 $("#myButton2").unbind('click'); 전에 $("#myButton2").click입니다.

-1

clickclick me first! 버튼을 클릭하면 처리기가 Click me 버튼에 첨부되어 계속 추가되기 때문입니다. 클릭 이벤트 처리기를 외부에 첨부 할 코드를 이동하십시오. 이것을 시도하십시오

$(document).ready(function() { 
     $("#myDiv").append($("<input />", { 
          type : "button", 
          id : "myButton1", 
          value : "Click me first!" 
         })); 
     $("#myButton1").live("click", function() { 
      var a = 1; 

     }); 
     $("#myButton2").click(function() { 
       alert(a); 
     }); 
    });