2012-01-10 2 views
0

나는 HTML이 :은 버튼 삭제 확인 절차 적

<button id='pusher'>pusher</button> 

<ul id="sortable"> 
    <li>things here</li> 
</ul> 

그리고 자바 스크립트 :

$(".del").click(function(e) { 
    $(this).parent().remove(); 
}); 


$("#pusher").click(function(e) { 
    var text = "test"; 
    var lix = $("<li class='uix' />").text(text); 
    lix.append($('<button class="del">xx</button>')); 
    lix.appendTo($("#sortable")); 
}); 

가 나는 경우 삭제 푸셔 버튼을 누른 다음 내부의 삭제 버튼, 새로운 <li> 요소를 만들 수 있도록하기 위해 노력하고있어 버튼을 누를 경우 <li> 요소가 삭제됩니다 ...

그러나 삭제되지는 않습니다.

아이디어가 있으십니까?

+0

오류를받을 수 있나요? 파이어 버그가 뭐라고 말하니? – MattW

+0

방화 광이 오류를 반환하지 않습니다. 그냥 xx 버튼은 효과가 없습니다. – David19801

답변

3
$(".del").click(function(e) { 

이는 그것이 실행 때 존재 .del 요소에 결합합니다. .live을 사용하려고합니다.

$(".del").live('click', function(e) { 
    $(this).parent().remove(); 
}); 

추가 할 때마다 이벤트를 요소에 바인딩합니다.

편집 : .live은 더 이상 사용되지 않습니다. 대신 .on을 사용해보세요.

$(document).on('click', '.del', function(e) { 
    $(this).parent().remove(); 
}); 
+1

다시. '생방송'은 부인된다. 대신 api.jquery.com/on을 참조하십시오. – Gajus

+0

사실 jQuery의 이전 버전 (1.7 이전 버전)을 강제로 사용하지 않는 한 .live(); 대신 .on()을 사용하려고합니다. – danwellman

+0

가이 - 대체 무엇입니까? – David19801

2

문제의 원인은 .click을 사용하여 처리기를 바인딩 할 때 요소가 존재하지 않기 때문입니다. 당신은 .live를 사용할 수 있지만 당신이 요소를 제어하기 때문에 더 나은 솔루션은 동적 핸들러를 연결하는 것입니다

function deleteClicked(e) { 
    $(this).parent().remove(); 
} 

$(".del").click(deleteClicked); 


$("#pusher").click(function(e) { 
    var text = "test"; 
    var lix = $("<li>").addClass('uix').text(text); 
    lix.append($('<button>').addClass('del').text('xx').click(deleteClicked)); 
    lix.appendTo($("#sortable")); 
}); 
+1

'live'이 (가) depricated입니다. 대신 http://api.jquery.com/on을 참조하십시오. – Gajus

+0

@Guy : 그 이유는 내가 그것을 사용하지 않았기 때문입니다.) 사용 방법에 대한 단서가없는 'on'에 대한 잘못된 정보를 제공하고 싶지는 않습니다. 대신에 로켓에게 말해. – Ryan

0

jQuery를 사용해야합니다. on || live 현재 및 미래의 현재 선택기와 일치하는 모든 요소에 대한 이벤트 처리기를 연결할 이벤트 바인딩입니다.

는 jQuery를 1.7+

$(document).on('click', '.del', function(e) { 
    $(this).parent().remove(); 
}); 

jQuery를 1.3 이상

$('.del').live('click', function(e) { 
    $(this).parent().remove(); 
}); 
+0

@Rocket 네, 실제로 조금 이상합니다. –