Jquery MVC:tablecell中的按钮未触发单击事件

Jquery MVC:tablecell中的按钮未触发单击事件,jquery,asp.net-mvc,Jquery,Asp.net Mvc,编辑-我正在输入更多信息以帮助获得答案。 我正在做的是使用autocomplete将项目添加到列表中 <section id="rightSide" class="shrinkwrap" style="float: right;margin-top:10px;width:500px;"> <fieldset> <legend>Select Other Materials</legend>

编辑-我正在输入更多信息以帮助获得答案。 我正在做的是使用autocomplete将项目添加到列表中

   <section id="rightSide" class="shrinkwrap" style="float: right;margin-top:10px;width:500px;">
        <fieldset>
            <legend>Select Other Materials</legend>
            <form method="get" action="@Url.Action("CreateOtherMaterials", "DataService")"
                  data-scd-ajax="true" data-scd-target="#otherMaterialList">
                <p>Select a Material: <input type="search" name="searchOtherMaterial" id="searchOtherMaterial" data-scd-autocomplete="@Url.Action("AutocompleteOtherMaterial", "DataService")" style = "width: 300px;" class="submitOtherMaterialSelectionNew" data-scd-add-other-material="@Url.Action("AddOtherMaterialNew", "DataService")"/>
                    @Html.DialogFormButton("Add New Material", Url.Action("AddMaterial", "Popup"), "Add New Material", null, Url.Action("Create"))
                </p>
            </form>  

            @Html.Partial("_OtherMaterials", Model.SupplierMaterialList.Where(x => x.PrimaryMaterialFlag == false).ToList())

        </fieldset>
    </section>
但是,此代码未捕获单击事件,我无法理解为什么尝试替换

alert(test);

我想你已经挺身而出,像这样尝试了

$('.removeItem').click(function () {
    var $form = $(".shrinkwrap");
    var options = {
        url: $form.attr("action"),
        type: $form.attr("method"),
        data: $form.serialize()
    };

    $.ajax(options).done(function (data) {
        var $tr = $(this).parent("tr");
        $tr.remove();
    });
});

当您处理动态添加到页面的动态内容时,事件处理程序(如
click()
)本身不会绑定到动态添加的选择器

您应该将代码放入
delegate()
on()
indside document load中,这样可以处理将来的内容

$('body').delegate('.removeItem', 'click', function(){
var $form = $(".shrinkwrap");
var options = {
    url: $form.attr("action"),
    type: $form.attr("method"),
    data: $form.serialize()
};

$.ajax(options).done(function (data) {
    var $tr = $(this).parent("tr");
    $tr.remove();
 });
});

您可以使用比
body
更接近的选择器来加快响应速度。您还可以使用
live('selector',function(){})
但从
jQuery v1.9
开始,它就被弃用了。希望这能有所帮助。

你是否收到了
警报()
?你的目的是什么,在结尾处包含
返回false
?你能发布你的HTML吗?很好,尽管我在它不工作的时候放在那里,因为它是一个显示模板,重复了很多次,var$表单将是一个表单集合,这不是我想要的。我很感激关于如何改进代码的建议。主要问题是事件未触发且警报未运行我认为live已替换为on?由代理执行此任务。现在我知道什么时候使用它了。很高兴这对你有用,
on()
没有被
live()
取代,而是在
live()
delegate()
作为替代方案存在时添加的。但是
live()
已从
jqueryv1.9
的jqueryapi集中删除。但是,它将一直工作到
v1.8.3
alert(test);
alert('test');
$('.removeItem').click(function () {
    var $form = $(".shrinkwrap");
    var options = {
        url: $form.attr("action"),
        type: $form.attr("method"),
        data: $form.serialize()
    };

    $.ajax(options).done(function (data) {
        var $tr = $(this).parent("tr");
        $tr.remove();
    });
});
$('body').delegate('.removeItem', 'click', function(){
var $form = $(".shrinkwrap");
var options = {
    url: $form.attr("action"),
    type: $form.attr("method"),
    data: $form.serialize()
};

$.ajax(options).done(function (data) {
    var $tr = $(this).parent("tr");
    $tr.remove();
 });
});