Q:

Executar função JavaScript no evento click de um botão dentro de uma tabela

Bom dia, tenho uma tabela e em cada linha dessa tabela tenho um botão, quando eu clicar nesse botão preciso que seja executada uma função mas não estou conseguindo fazer isso por que acho que não estou sabendo usar os seletores corretos.
Tabela:
<table id="tbl" class="table table-striped">
    <tr id="cabecalho">
        <th>
            ID
        </th>
        <th>
            Insumo
        </th>
        <th>
            TD
        </th>
        <th>
            Unidade
        </th>
        <th>
            Quantidade
        </th>
        <th>
            Adicionar
        </th>
    </tr>
</table>

Script que gera o corpo da tabela:
$('#pesquisar').click(function () {
    $('.corpoTbl').remove();
    $.ajax({
        url: "/RCM/ListarMateriais",
        type: "POST",
        data: { nome: $('#NomeMaterial').val() },
        datatype: 'json',
        success: function (data) {
            $.each(data, function (I, item) {
                $('#tbl').append("<tr class=\"corpoTbl\"> <td class=\"id\">" + item.ID + "</td><td>" + item.Nome + "</td><td>" + item.TD + "</td><td>" + item.Unidade +
                    "</td><td> <input class=\"qtda\" type=\"text\" value=\"0\" style=\"width: 50px;\" /> </td><td> <input class=\"btn\" type=\"button\" value=\"Adicionar\" /> </td></tr>")
            })
        }
    });
});

Script que quero que seja executado no click do botão.
$('#tbl .btn').click(function () {
    var Qtd = $('.qtda');
    var Id = $('.id');    
    if (Qtd.value != "0" && Qtd.value != "") {
        $.ajax({
            url: "/RCM/AddMaterial",
            type: "POST",
            data: { "Qtd": $('.qtda').Value, "Id": Id.textContent }
        })
        alert("Materiais Adicionados!");
    }
    else {
        alert("Informe a quantidade do material!")
    }

})

A:

O problema me parece que você está tentando encontrar os botões para esperar os clicks antes de os botões existirem na página, já que eles são adicionados mais tardes, via ajax.
A solução mais simples seria usar eventos delegados, onde você esperará por clicks na tabela, pois ela já está na página desde o início, filtrando para apenas os clicks que vêm dos botões:
$('#tbl').on('click', '.btn', function (event) {
    var $botao = $(event.target);
    var $tr = $botao.closest('tr');
    var $qtda = $tr.find('.qtda');
    var $id = $tr.find('.id');    
    if ($qtda.val() !== "0" && $qtda.val() !== "") {
        $.ajax({
            url: "/RCM/AddMaterial",
            type: "POST",
            data: { "Qtd": $qtda.val(), "Id": $id.text() }
        })
        alert("Materiais Adicionados!");
    }
    else {
        alert("Informe a quantidade do material!")
    }

})

