Javascript 尝试在调整大小后将jquery设置为激发一次
有没有办法在调整大小时只触发jquery一次?我这里有一个脚本,它在Javascript 尝试在调整大小后将jquery设置为激发一次,javascript,jquery,Javascript,Jquery,有没有办法在调整大小时只触发jquery一次?我这里有一个脚本,它在锚定元素的href中添加了一个散列(#)。问题是脚本在调整大小时会一直保持不变,因此它会在href中不断添加哈希。有没有办法让它只燃烧一次 (function($){ 'use strict'; var mobileMenuDrawer = { init : function() { $('.region-primary-menu').addClass('prim
锚定元素的href
中添加了一个散列(#)
。问题是脚本在调整大小时会一直保持不变,因此它会在href
中不断添加哈希。有没有办法让它只燃烧一次
(function($){
'use strict';
var mobileMenuDrawer = {
init : function() {
$('.region-primary-menu').addClass('primary-mobile-menu');
$('.primary-mobile-menu .menu.-primary > .menu-item').addClass('mobile-menu-item');
$('.primary-mobile-menu .menu.-primary > .mobile-menu-item > .link').off('click').on('click', function() {
$(this).closest('.mobile-menu-item').toggleClass('-active');
})
},
clear : function() {
$('.primary-mobile-menu, .mobile-menu-item').removeClass('primary-mobile-menu mobile-menu-item');
}
}
var addHash = {
init : function() {
if ($('.region-primary-menu').hasClass('primary-mobile-menu')) {
$('.primary-mobile-menu .mobile-menu-item > .link').each(function() {
// console.log($(this).attr('href'));
let currentUrl = $(this).attr('href');
$(this).prop('href', '#' + currentUrl);
// this.href = '/#/' + this.href;
// window.location.hash = $(this).attr('href');
});
}
else {
$('.primary-mobile-menu .mobile-menu-item > .link').each(function() {
$(this).removeAttr('#');
});
}
}
}
$(document).ready(function() {
if ($(window).outerWidth() <= 1024) {
mobileMenuDrawer.init();
}
else {
mobileMenuDrawer.clear();
}
addHash.init();
});
$(window).on('resize', function() {
if ($(window).outerWidth() <= 1024) {
mobileMenuDrawer.init();
addHash.init();
}
else {
mobileMenuDrawer.clear();
}
});
})(jQuery)
(函数($){
"严格使用",;
var mobileMenuDrawer={
init:function(){
$('region primary menu').addClass('primary-mobile-menu');
$('.primary-mobile-menu.menu.-primary>.menu-item').addClass('mobile-menu-item');
$('.primary mobile menu.menu.-primary>.mobile menu item>.link')。关闭('click')。打开('click',function()){
$(this).closest('.mobile菜单项').toggleClass('-active');
})
},
清除:函数(){
$('.primary-mobile-menu,.mobile-menu-item').removeClass('primary-mobile-menu-mobile-menu-item');
}
}
var addHash={
init:function(){
if($('.region主菜单').hasClass('primary-mobile-menu')){
$('.primary mobile menu.mobile menu item>.link')。每个(函数(){
//console.log($(this.attr('href'));
让currentUrl=$(this.attr('href');
$(this.prop('href','#'+currentUrl);
//this.href='/#/'+this.href;
//window.location.hash=$(this.attr('href');
});
}
否则{
$('.primary mobile menu.mobile menu item>.link')。每个(函数(){
$(this.removeAttr(“#”);
});
}
}
}
$(文档).ready(函数(){
if($(window).outerWidth()是。只需放置一个标志来检查属性是否已存在:
if(!$(this).prop('href')) {
$(this).prop('href', '#' + currentUrl);
}
if($(this).prop('href') == "") {
$(this).prop('href', '#' + currentUrl);
}
或者,如果财产相似:
if($(this).prop('href') != '#' + currentUrl) {
$(this).prop('href', '#' + currentUrl);
}
或者如果属性为空(仅当属性已存在时才起作用):
如果要阻止整个代码块执行,可以使用某种自定义标志,在所需操作完成后,需要将其切换到相反的布尔值。可以在局部函数作用域中将其设置为变量,或者将其设置为addHash
对象的属性。我将在本例中设置前者。
let isOk = false;
var addHash = {
init : function() {
if(isOk) return;
if ($('.region-primary-menu').hasClass('primary-mobile-menu')) {
$('.primary-mobile-menu .mobile-menu-item > .link').each(function() {
let currentUrl = $(this).attr('href');
$(this).prop('href', '#' + currentUrl);
isOk = true;
});
}
}
}
注意:您应该停止使用var。我通过添加标志或条件尝试了第一种解决方案,但当我尝试调整大小时,它仍然继续添加哈希值。制作一个jsfiddle
,您可以检查它。我在这里尝试解决的问题只是想知道如何在indow将在1024px
下调整大小,因此它将停止向href
@clestcruz添加散列
,我编辑了一点,我的任何解决方案现在都可以工作。您的第二个解决方案有一个额外的括号()
我正在尝试第二种解决方案,但仍然添加了哈希
,这很奇怪,因为标志的目的是检查值