2012-09-04 2 views
0

다음 코드를 실행하면 상대 양식을 볼 것으로 예상되므로 정보를 추출 할 수 있습니다. 대신 this이 문서를 가리 킵니다.라이브 바인딩 된 제출이 크롬 요소를 가리 키지 않습니다.

라이브 바인딩을 사용하는 것과 관련 있다고 가정합니다. 해결 방법이 있습니까?

$('.form_one').add('.form_two').live('submit',function(e){ 
     e.preventDefault(); 
     console.log($(this)); 
    }) 
+1

1)'live'는 더 이상 사용되지 않으며'on'을 대신 사용하십시오. 2) 왜 .form_two를 추가합니까? '$ ('.form_one, .form_two'). on ... ' – Shmiddty

+0

양식을 동적으로 추가하지 않으면'$ ('. form_one, .form_two ')로 작성할 수 있습니다. submit (function() ... ' – Shmiddty

+0

'on'은 제 경험상 완벽하지 않았습니다. 잘못 사용했을 수도 있지만,이 경우'live'를'on'으로 바꾸면 크롬에서 작동하지 않습니다 . –

답변

1

live() 가장 높은 수준의 DOM 요소에 이벤트 핸들러를 위임에 대한 바로 가기 때문이다 - document이 - 왜 this 점의 범위가있다.

해결 방법으로 이벤트를 발생시킨 요소를 얻으려면 $(e.target)을 사용해야합니다.

또한 live()은 더 이상 사용되지 않으며 jQuery 1.7 이상을 사용하는 경우 delegate() 또는 on()을 사용해야합니다.

Example fiddle

0

http://jsfiddle.net/ZBaWd/on 핸들러를 사용하는 방법을 보여줍니다.

<div id="container"></div>​ 

var cont = $("#container"); 

// Note that I'm attaching it to container and not the forms themselves. 
// Then, as an additional parameter, I provide the selector "form" so that 
// `on` is only fired for "form" elements that "submit" and are children of "#container" 
$("#container").on("submit", "form", function(e){ 
    e.preventDefault(); 
    console.log($(this)); 
}); 


$("<form>").addClass("form_one").append("<button type='submit'>Submit 1</button>").appendTo(cont); 
$("<form>").addClass("form_two").append("<button type='submit'>Submit 2</button>").appendTo(cont); 
관련 문제