主要问题:当用户点击#
代码时,摆脱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的东西,但它与问题无关,因此我没有把它放在标签中。
由于
答案 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
,点击此锚点会导致查询字符串中出现#
。
修改强>
上述解决方案会导致所有点击都通过处理程序,即使是我不想要的。由于这个正常anchor
和href
因为网址不起作用,所以这是工作解决方案
$("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(); });