【问题标题】:<a> click event not firing from jquery [closed]<a>单击事件未从jquery触发[关闭]
【发布时间】:2016-05-04 16:39:50
【问题描述】:

我需要在不重定向到另一个页面的情况下更新数据。在我的控制器中,我有一个返回类型为void 的方法来更新数据。在我的部分观点中,我有一个 &lt;a&gt; 元素。单击链接时,我正在调用上述方法,该方法将void 返回到我的 jQuery 文件中。

<div id="Footer">
    <a href="#" id="MarkAllRead">Mark All Read</a>
</div>
$(".MarkAllRead").click(function () {
    alert('click');
    $.ajax({
        url: "/Controller/MarkNotification",
        method: 'POST',
        cache: false,
        datatype: "text",
        success: function (result) {
            $("#ncount").hide();
        },
        error: function (xhr) {
            alert(result.responseText);
        }
    });
});
public void MarkNotificationAsRead()
{
    db.Notifications.ToList().ForEach(n => n.Status = true);
    db.SaveChanges();
}

我面临的问题是 AJAX 调用没有被触发。单击链接时,我想调用上述方法,该方法从我的 jQuery 文件中返回 void

【问题讨论】:

  • 只有一个#MarkAllRead 元素。没有错误。点击事件没有被触发。警报(“点击”);没有被解雇

标签: jquery asp.net-mvc asp.net-ajax


【解决方案1】:

我认为您的 jQuery 选择器有错误。

$(".MarkAllRead").click(function () {

应该变成这样:(使用 # 代替点 - 点代表类,# 代表 id)

$("#MarkAllRead").click(function () {

【讨论】:

  • 我已经尝试过#。但它没有任何区别
  • 更改为 # 是否会导致 Alert('click') 触发?如果没有 - 也许您在页面上创建链接之前正在运行脚本,因此无法找到它。
  • 是的,你是对的。我已将我的 ajax 调用移至该特定视图,它现在正在触发该事件。除了将代码移动到特定视图之外,还有其他方式/完美的解决方案。我会将其标记为答案,因为它给了我修复的想法。
  • 不确定您是否熟悉仅在页面加载/准备好时才执行代码的想法:link
  • 我的布局中有脚本引用来渲染脚本。特定部分通知是菜单中的一个弹出窗口,当我单击计数图像时将加载该窗口。因此,正如您所说,我的脚本文件在加载部分视图(菜单下拉菜单)之前重新渲染。感谢您的回复,它解决了我的问题。
【解决方案2】:

当元素具有id 时,您将通过class 进行选择。改变这个:

$(".MarkAllRead").click(function () {

到这里:

$("#MarkAllRead").click(function () {

【讨论】:

  • 如果问题是由拼写错误引起的,您为什么不投票关闭它?
  • 是什么让你认为我没有?
  • 那你为什么回答一个跑题的问题?
  • 努力为 OP 提供帮助。
  • 嗨..我没有得到这个问题的问题。我对stackoverflow没有那么有经验。如果查询有任何问题,请纠正我
猜你喜欢
  • 2018-07-28
  • 2012-02-14
  • 2013-10-14
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
相关资源
最近更新 更多