我试图执行
$('a').click(function egg (event) {
if ($this.is('#home') || $this.is('#art') || $this.is('#con') || $this.is('#port') || $this.is('#m2')) {
} else {
event.preventDefault();
}
});
我只想执行" event.preventDefault();"但是,如果元素id不等于我在if语句中列出的参数,则只执行" event.preventDefault();"在所有" .a"元素,我怎样才能达到我想要获得的结果?
答案 0 :(得分:3)
检查一下......
$(this)
是有效的jQuery包装器。不是$this
$('a').click(function egg(event) {
if ($(this).is('#home') || $(this).is('#art') || $(this).is('#con') || $(this).is('#port') || $(this).is('#m2')) {
} else {
event.preventDefault();
}
});
答案 1 :(得分:1)
//place all links you want in the if part here
var goodLinks = ['home', 'art', 'con'];
$('a').on('click', function(e){
var id = e.target.id;
if(goodLinks.includes(id)){
console.log('valid id');
}
else{
e.preventDefault();
console.log("invalid id -- else");
}
});
答案 2 :(得分:1)
如果您使用.not()
构造从选择中排除特定ID,并将该ID列表组合为单个选择器作为逗号分隔列表,而不是必须,则可以使这更简单一些有一系列.is(foo) || .is(bar)...
。
$('a').not('#home, #art, #con, #port, #m2').click(function(e) {
console.log("e.preventDefault will fire");
e.preventDefault();
});
$('#home').click(function() { /* your code here */ });
$('#art').click(function() { /* your code here */ });
// ...etc
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="home" href="#">home</a>
<a id="art" href="#">art</a>
<a id="con" href="#">con</a>
<a id="port" href="#">port</a>
<a id="m2" href="#">m2</a>
<a id="other" href="#">other</a>
<a href="#">another</a>
您想要在#home
等链接上的特定功能仍然会作为每个元素的单独点击事件添加,就像您现在可能已经拥有它一样;他们不会拿起event.preventDefault()
。
答案 3 :(得分:0)
编辑:更改了该功能并为所有允许的ID创建了一个数组。向下滚动以查看此示例中的标签。我真的希望我能帮到你,但这就是你想要的吗?
你去了:
var allowed_ids = ['home', 'art', 'con', 'port', 'm2'];
var scroll_speed = 1500;
$('a').click(function(e) {
if ($.inArray( e.target.id, allowed_ids ) > -1) {
$('html, body').animate({scrollTop: 0}, scroll_speed);
} else {
alert("invalid! ID is not in Array!");
}
e.preventDefault();
});
&#13;
#content{
height:1500px;
background:grey;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="content">
This is the top!
</div>
<a id="home" href="#">home</a>
<a id="art" href="#">art</a>
<a id="con" href="#">con</a>
<a id="port" href="#">port</a>
<a id="m2" href="#">m2</a>
<a id="other" href="#">invalid</a>
&#13;