【发布时间】:2016-10-27 08:38:02
【问题描述】:
EDIT 27.10.2016, 12:00:我可以找出以下奇怪行为的原因: 这仅仅是因为在 CSS 中,用于菜单的某些列表项的背景图像的路径是错误的。这导致控制器的动作再次触发。 (!!!)
我有一个具有以下操作的控制器:
public IActionResult Index()
{
//get records from the database and pass them to the View
}
然后在我看来,我显示以下导航(css 类基于引导程序):
<nav class="navigation_primary">
<ul class="nav nav-justified hidden-xs">
<li>
<a href="https://www.google.com">Google</a>
</li>
<li class="dropdown">
<a href="https://www.stackoverflow.com" class="dropdown-toggle">StackOverflow</a>
<ul class="dropdown-menu">
<li><a href="#">ASP.NET</a></li>
<li><a href="#">C#</a></li>
<li><a href="#">jQuery</a></li>
</ul>
</li>
</ul>
</nav>
然后,在 jQuery 中,我有以下代码负责在鼠标悬停父级时显示子条目(例如,当 StackOverflow 悬停时显示 ASP.NET、C#、jQuery)。
//to open the primary navigation on mouseover
$(".dropdown").hover(
// open the dropdown by hover
function ()
{
$(this).toggleClass("open");
},
// close if the cursor goes outside the hover
function ()
{
$(this).toggleClass("open");
}
);
奇怪的是,在我将鼠标悬停在具有任何子项的菜单项(在本例中为具有“下拉”类的“StackOverflow”)之后,我在上面发布的整个 Index() 操作将再次执行。
有人看到这种奇怪行为的原因吗?在这种情况下,我不明白为什么会发生 jQuery 和 ASP.NET MVC 之间的这种干扰。
EDIT 27.10.2016, 11:00: 我发现冲突必须依赖于其他东西: 当我注释掉上面提到的 jQuery 代码并用下面的 CSS 替换它以达到相同的行为时,控制器的动作也会被触发。
ul.nav li.dropdown:hover ul.dropdown-menu{ display: block; }
【问题讨论】:
-
这是您应用程序中的全部代码吗?您发布的任何内容都不会导致回帖。还有其他事件处理程序吗?你在用bootstrap js吗?
-
你有两次
function () { $(this).toggleClass("open"); }。这会导致问题吗? -
@RobLang 当然这不是整个代码,而只是我认为与解释此问题相关的部分。还有许多其他事件处理程序,我也在使用 bootstrap.js。但是当我在 jQuery 中做一些不同的事情而不是切换 css 类时(例如使用 css() 函数来指定一些 css 属性),控制器的操作不再被触发
-
@ElectricRouge 不,这不会导致问题。我根据api.jquery.com/hover指定了这段代码两次,第一次是鼠标指针进入元素时执行的函数。第二个是当鼠标指针离开元素时执行的函数。
-
@RobLang 在我上面的编辑中查看更多信息
标签: c# jquery asp.net asp.net-mvc twitter-bootstrap-3