我制作了一个简单的jquery脚本,用于在点击类时对页面内容进行排序...在本例中,所有产品,窗口或macintosh。该脚本的工作方式正如我所希望的那样,因为我在href窗口中使用#滚动...无论如何都要阻止窗口滚动并保持用户点击其中一个链接时的确切位置?
另外,我把脚本放在一起很快 - 如果有人想提供一些优化,请继续......
基本的html:
<a class="all" href="#">All Products</a>
<a class="win" href="#">Windows</a>
<a class="mac" href="#">Macintosh</a>
<div class="windows">1 win</div>
<div class="macintosh">2 mac</div>
<div class="windows">3 win</div>
<div class="windows">4 win</div>
<div class="windows">5 win</div>
<div class="macintosh">6 mac</div>
<div class="windows">7 win</div>
脚本:
var $zproducthide = jQuery.noConflict();
$zproducthide(document).ready(function() {
$current = 'all';
$zproducthide(".all").click(function () {
if ($current != 'all'){
$zproducthide(".windows").hide();
$zproducthide(".macintosh").hide();
$zproducthide(".windows").fadeIn(1500);
$zproducthide(".macintosh").fadeIn(1500);
$current = 'all';
}
});
$zproducthide(".win").click(function () {
if ($current != 'windows'){
$zproducthide(".windows").hide();
$zproducthide(".macintosh").hide();
$zproducthide(".windows").fadeIn(1500);
$current = 'windows';
}
});
$zproducthide(".mac").click(function () {
if ($current != 'macintosh'){
$zproducthide(".windows").hide();
$zproducthide(".macintosh").hide();
$zproducthide(".macintosh").fadeIn(1500);
$current = 'macintosh';
}
});
});
答案 0 :(得分:1)
回答你的问题: 触发事件时(单击链接),您需要阻止默认行为并像往常一样继续。意味着您需要在每个函数中处理事件并调用event.preventDefault()。这样就不会添加主题标签。
您的一个功能将如下所示:
$zproducthide(".all").click(function (event) {
event.preventDefault(); // no hashtag please
if ($current != 'all'){
$zproducthide(".windows").hide();
$zproducthide(".macintosh").hide();
$zproducthide(".windows").fadeIn(1500);
$zproducthide(".macintosh").fadeIn(1500);
$current = 'all';
}
});
除此之外,这里有一些建议:
1:因为你使用JS显示/隐藏元素,你可以摆脱a-tags并使用你喜欢的任何东西,并为它添加一个点击触发器,例如按钮
<button class="all" href="#">All Products</button>
<button class="windows" href="#">Windows</button>
<button class="macintosh" href="#">Macintosh</button>
2:添加更多元信息,稍后会对您有所帮助(例如,所有7项都是某种产品吗?)
<div class="prod windows">1 win</div>
<div class="prod macintosh">2 mac</div>
3:统一所有3个按钮的点击触发器并使用新类
$("button").click(function(event) {
event.preventDefault();
prod = $(this).attr('class');
if(prod!="all") {
// mac,win
$(".prod")
.hide() // hide all elements
.filter("."+prod) // filter win/mac
.fadeIn(1500); // show those
} else {
// all
$(".prod")
.hide()
.fadeIn(1500);
}
});
答案 1 :(得分:1)
尝试使用javascript:void(0)
作为href:
<a href="javascript:void(0)"></a>
答案 2 :(得分:0)
如果您使用
之类的标签<a class="all" href="#">All Products</a>
<a class="win" href="#">Windows</a>
<a class="mac" href="#">Macintosh</a>
它强制浏览器刷新,将元素设置为div,如果需要a href look set css to
cursor: pointer;
答案 3 :(得分:0)
你好吗?
新答案(包括一些优化):
//Start with the default class
$current = 'all';
//Setup an object which is configured as { class : 'jQuery selectors' }
//This is neat because you can add more items and only modify this array like this:
//arr = {'lin': '.linux', 'win' : '.windows', 'mac' : '.macintosh' };
arr = {'win' : '.windows', 'mac' : '.macintosh' };
//Get all the object properties in order to make it dynamic (so you don't have to add new classes manually, only in our "arr" object
var sel = '';
$.each(arr,function(k,v){ sel += ',.' + k; });
//at this point aSelector equals to ",.win,.mac";
//create the .all selector
arr.all = sel;
//Equals to $('.all,.win,.mac'
$('.all' + sel,function(){
$current = $(this).attr('class');
$(arr['all']).hide(); //Hide all elements
$(arr[$current]).fadeIn(1500); //Show only the current one (in case it's 'all', all elements will be shown)
//Prevent default behaviour!
return false;
});
原始答案:
防止这种情况的方法是在click事件中返回false,这样,默认行为就不会执行了!所以:
//Select all the anchors with the desired classes
$("a.all,a.win,a.mac").click(function(){ return false; });
我相信这应该有用!
干杯!