【发布时间】:2012-11-03 16:34:52
【问题描述】:
我试图在第一次单击时更改列表项的文本和 href。在第二次单击时,它应该转到新的 url。以下是我尝试过的几种方法:
HTML
<ul class="nav">
<li><a href="#">Click me</a></li>
</ul>
jQuery
这种方式会更改文本,然后立即转到新的 url。
$('ul.nav li:nth-child(1) a[href="#"]').click(function() {
$(this).text('New Text');
$(this).attr('href', 'http://www.website.com');
});
第二种方式切换文本和 href,但 preventDefault() 仍然阻止我转到新 URL,尽管在选择器中指定了 a[href="#"]。
$('ul.nav li:nth-child(1) a[href="#"]').click(function(e) {
$(this).text('New Text');
e.preventDefault();
$(this).attr('href', 'http://www.website.com');
});
【问题讨论】:
-
检查
.one()方法here。 -
尽管在选择器中指定了 a[href="#"],但您的语句“preventDefault() 仍然阻止我访问新 URL”并不清楚。请详细说明...
-
这就是
e.preventDefault()应该做的,防止默认行为——正如inhan 建议的那样,查找.one() -
对不起,我刚开始学习 jQuery。我认为指定 a[href="INSERTURL"] 应该只选择具有该特定 url 的 href。我的逻辑是一旦点击它,一旦 url 改变并且不再匹配选择器中的内容,因此不会再次触发。感谢您的意见。
-
@Jeff - 如果您使用
.click()或.on()的非委托形式,它会将处理程序绑定到当时与您的选择器匹配的所有元素,即使元素稍后会更新,以使它们不再匹配。如果您使用.on()的委托形式,它将按您的想象工作:$('ul.nav li:nth-child(1)').on('click', 'a[href="#"]', function() {...