2009-05-19 6 views
0

버튼을 누른 후 동적으로 생성 된 표 행을 숨기려고합니다. 지금까지 동적 함수의 일부를 처리했습니다.클릭시 동적으로 생성 된 표 행 숨기기

각 동적 행에는 '취소'및 '저장'버튼이 있으며,이를 쉽게 관리 할 수 ​​있습니다. 내 문제는 실제로 행 자체와 함께 작업하고 있습니다. 지금 행을 숨길 필요가

$(function() { 
    $(".add").click(function(){ 
     // Just append to the table 
     $("table#bookmarks tr:first").after("<tr class='new' id='<?php echo rand(1, 9999); ?>'><td></td><td><b>URL:</b> <input type='text' id='newURL' /><br /><b>Title:</b> <input type='text' id='newTitle' /><br /><b>Description:</b><br /><textarea id='newDesc'></textarea></td><td><b>Tags:</b> <input type='text' id='newTags' /></td><td><a href='#' class='save'>Save</a><br /><a href='#' class='cancel'>Cancel</a></td></tr>"); 
     $('span#links').html('<i style="color: #FF0000">You must reload to recount links!</i>'); 
     // Actually, the user doesn't want to add another link 
     $('.cancel').click(function() { 
      $(this).parents(".new").animate({ backgroundColor: "#FF0000" }, "fast").animate({ opacity: "hide" }, "slow"); 
     }); 
     // Seems the user wants to add a link! 
     $('.save').click(function() { 
      $("table#bookmarks tr.new #id").animate({ backgroundColor: "#FFFFFF" }, "fast").animate({ opacity: "hide" }, "slow"); 
     }); 
    }); 

}); 

, 나는 다양한 방법의 모든 종류의 시도, .parent, .attr 몇 이름을 지정합니다.

+0

"내 문제는 실제로 행 자체와 관련이 있습니다"는 의미는 무엇입니까? 또한 선택기 $ ("table # bookmarks tr.new #id")를 사용하고 있지만 id = "id"인 요소가 없습니다. – Emmett

+0

나는 이것이 오래되었다는 것을 압니다. 선택기를 말할 때 코를 치면됩니다. –

답변

3

이처럼 jQuery를 기능을 체인보십시오 :

$(function() { 
    $(".add").click(function() { 
     $("<tr class='new'><td></td><td><b>URL:</b> <input type='text' id='newURL' /><br /><b>Title:</b> <input type='text' id='newTitle' /><br /><b>Description:</b><br /><textarea id='newDesc'></textarea></td><td><b>Tags:</b> <input type='text' id='newTags' /></td></tr>") 
      .append($("<td></td>") 
       .append($("<a href='#'>Save</a><br/>") 
        .click(function() { $(this).parents(".new").animate({ backgroundColor: "#FF0000" }, "fast").animate({ opacity: "hide" }, "slow"); })) 
       .append($("<a href='#'>Cancel</a>") 
        .click(function() { $(this).parents(".new").animate({ backgroundColor: "#FF0000" }, "fast").animate({ opacity: "hide" }, "slow"); }))) 
      .insertAfter($("table#bookmarks tr:first")); 
      $('span#links').html('<i style="color: #FF0000">You must reload to recount links!</i>'); 
    }); 
}); 

이 (. 여전히 조금 지저분한 그래서 이것은 당신의 원본 코드의 수정 된 버전입니다)

+0

훌륭하게 작동했습니다! 에머트 감사합니다! –

2

jQuery 1.3.2 이후 새로운 jQuery 라이브를 사용하여 동적으로 생성 된 항목에 대한 클릭 기능을 유지할 수 있습니다.

http://docs.jquery.com/Events/live

+0

답변 해 주셔서 감사합니다. 지금 추가하겠습니다. –

+0

jQuery live는 아름다운 이벤트이지만 모든 이벤트를 지원하지는 않습니다. 귀하의 경우에는 클릭이 지원되지만 맞춤 이벤트에 대해서는 http://docs.jquery.com/Plugins/livequery가 동일한 기능을 제공하므로 괜찮을 것입니다. – Ravi

+0

Ravi, 코드의 위치와 위치를 제안 할 수 있습니까? 나는 요소들이 정확하게 호출되고 있다는 것을 확신한다. –

0

내가 함께 던져 빠른 예제지만 나는 jQuery에 녹슬지 않는 것을 인정할 것이다. 그러나이 코드는 적어도 나를 위해 작동합니다.

$(function() { 
$(".add").click(function(){ 
    var save = $("<a href='#' class='save'>Save</a>").click(function() { 
     $(this).parent().animate({ backgroundColor: "#FFFFFF" }, "fast").animate({ opacity: "hide" }, "slow") 
    }) 

    var cancel = $("<a href='#' class='cancel'>Cancel</a>").click(function() { 
     $(this).parent().animate({ backgroundColor: "#FFFFFF" }, "fast").animate({ opacity: "hide" }, "slow") 
    }) 

    var buttonTD = $("<td></td>"); 
    buttonTD.append(save); 
    buttonTD.append(cancel); 

    var row = $("<tr class='new' id='<?php echo rand(1, 9999); ?>'><td></td><td><b>URL:</b> <input type='text' id='newURL' /><br /><b>Title:</b> <input type='text' id='newTitle' /><br /><b>Description:</b><br /><textarea id='newDesc'></textarea></td><td><b>Tags:</b> <input type='text' id='newTags' /></td></tr>") 
    .append(buttonTD); 
}); 

});

+0

돔 추가가 너무 많습니다. 좋은 유지할 수있는 솔루션이 아닙니다. – redsquare

+0

게시 한 지 몇 개월 만에이 게시물을 파 냈습니까? 얼마나 많은 추가가 있습니까? 나는 너가 너의 지식에 조금 녹슬지도 모르다 것을 생각한다. – doomspork

+0

buttonTD.append (저장); buttonTD.append (취소); 한 번에해야합니다. 추가로 인해 성능이 저하되는 다시 그리기가 발생합니다. – redsquare

0

JQuery와 라이브 기능 : 여기

$("#sendmail").live("click", function(){ 

    // your code goes here 


}); 

내가 그것을 사용하는 방법의 예입니다. (#mytable 같은) 당신을 도와줍니다

$("#cancel_row").live("click", function(){ 

    $(this).$("#mytable tr").hide(); 

}); 

희망

먼저 테이블에게 자료 :
$("#sendmail").live("click", function(){ 

    $("#emailres").html('<img src="../images/ajax-loader.gif">'); 
    var youremail = $("#youremail").val(); 
    var subject = $("#subject").val(); 
    var message = $("#message").val(); 

    $.ajax({ 
    type: 'post', 
    url: 'email.php', 
    data: 'youremail=' + youremail + '&subject=' + subject + '&message=' + message, 

    success: function(results) { 
     $('#emailres').html(results); 
     } 
    }); // end ajax 

}); 

선택한 행을 숨기려면 같은 것을 할.

+0

브릴리언트, jQuery 라이브 사용에 대한 좋은 예를 보여줍니다. 감사합니다 하산! –