JQuery没有检测到局部视图中的id元素

时间:2014-07-16 16:56:51

标签: jquery asp.net-mvc-4

我有一个id元素"删除" (在局部视图中)单击将从电影中删除producerId。当我点击它时,jquery函数没有响应,没有任何反应。请帮我看看这里出了什么问题。

这是我的视图html(_ProducerIndex.cshtml) -

@model MovieInfo.Models.Producer

@if (Model != null)
{
<table>

    <tr>
        <td>
            @Html.DisplayFor(model => model.Name)
        </td>
        <td>
            <div id="removeproducer" data-mi-producerId="@Model.ProducerId" data-mi-movieid="@ViewData["Movie"]">
                <a href="#">Remove</a>
            </div>
        </td>
    </tr>

</table>

}

这就是我的jquery正在做的事情 -

$(function () {

var removeProducer = function () {

    var $a = $(this);
    var prodId = $a.attr("data-mi-producerid");
    var mov = $a.attr("data-mi-movieId");

    var options = {
        url: "/Movie/ProducerRemove",
        contentType: "application/json",
        data: JSON.stringify({ producerId: prodId, movie: mov }),
        type: "post",
        dataType: "html"
    };

    $.ajax(options).done(function (data) {
        var $target = $("#producerindex");
        $target.html(data);
    });

    return false;
};

$("#removeproducer").on("click", removeProducer);
});

我尝试在removeProducer函数中放置alert语句但是没有调用它。

3 个答案:

答案 0 :(得分:4)

如果你的元素是通过ajax引入的,那就意味着你可以点击&#39;在文档上存在实际元素之前分配事件。你必须等到ajax完成后或做

之类的事情
$('body').on('click', '#removeproducer', removeProducer);

代替。

以后一种方式执行此操作会将click事件绑定到正文,但只有在单击#removeproducer元素时才会作出反应,它将随时触发文档中找到的所有#removeproducer元素。

答案 1 :(得分:2)

问题是你在事件处理程序声明之后声明你的函数是一个变量,并且在那个例子中,变量还没有被声明,因此不可用于事件处理程序要解决此问题,只需将var removeProducer = function () {切换为function removeProducer() {

即可

此处information为何会发生这种情况

答案 2 :(得分:0)

您应该在函数后面添加以下行,因为在您调用它时未定义removeProducer

$("#removeproducer").on("click", removeProducer);

DEMO