在JavaScript中将`return false;`附加到`onClick`事件处理程序

时间:2012-02-10 04:58:44

标签: jquery

主要问题:当用户点击#代码时,摆脱anchor。我找到了一个解决方案,即在return false;处理程序

中添加onClick

次要问题:我当前的代码如下所示

<a href="#" onclick="javaScript:toggleDisplay();" title="Some Title">
    @ViewBag.TotalRecords
</a>

根据我得到的解决方案,我希望它像这样

<a href="#" onclick="javaScript:toggleDisplay();return false;" title="Some Title">
    @ViewBag.TotalRecords
</a>
  • 如何将return false;附加到我的javaScript函数调用中?我可以手动完成,但有任何简单的方法可以做到这一点。我正在使用jQuery?
  • 有没有其他方法可以摆脱#,而无需修改当前标记?

修改

@ViewBag.TotalRecords:这是一个MVC3 ASP.Net的东西,但它与问题无关,因此我没有把它放在标签中。

由于

4 个答案:

答案 0 :(得分:4)

你真的不应该使用a标签 - 它不是一个链接;它充当了一个javascript按钮。如果您愿意,可以使用CSS将其设置为看起来像链接,但从语义上讲,它不是锚点。请考虑使用<span class="toggle-display-button"></span>或类似内容。这也将消除滚动到页面顶部的不必要的副作用,并将#附加到您现在遇到的URL。

将javascript放在你的标记中也是不好的做法。您可以使用jQuery的.click方法将事件直接绑定到元素;如果您决定更改页面在未来的外观或工作方式,这将更清晰,更灵活。

答案 1 :(得分:3)

感谢Phil,正如我所说的那样。只有两个解决方案。

如果我将以下代码添加到js文件中,则会处理所有click处理程序(稍后将使其专用于anchor

使用纯JavaScript(Unobtrusive JavaScript

document.addEventListener('click', function (e) {
   e.preventDefault();
   return false;
});

使用jQuery

$(document).click(function (e) {
    e.preventDefault();
    return false;
});

jQuery解决方案与elclanrs建议的解决方案略有不同,在某种意义上,如果我$('a').click(function(e){ e.preventDefault(); });,它适用于anchor,但我修改了我的DOM并添加了新的anchor,点击此锚点会导致查询字符串中出现#

修改

上述解决方案会导致所有点击都通过处理程序,即使是我不想要的。由于这个正常anchorhref因为网址不起作用,所以这是工作解决方案

$("a").live("click", function (e) {
   if ($(this).attr("href") != "#") return;
   e.preventDefault();
   return false;
});

希望这有助于其他人。

答案 2 :(得分:3)

如果你不能改变你的html,或者你连接点击事件的方式,你总是可以阻止点击进行(这是导致用#更新网址的原因):

$(document).on('click', 'a', function(e) {
    if ('#' == $(this).attr('href'))
        e.preventDefault();
});

你真的应该重构,18页并不多。有了一个好的IDE,它应该很快。

答案 3 :(得分:2)

您确定知道如何使用jQuery吗? #表示空链接,你没有摆脱它......

$('a').click(function(e){ e.preventDefault(); });