我创建了yii 1应用程序,并使用以下脚本在视图文件中导航:
$(function() {
$('a[href*="#"]:not([href="#"])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html, body').animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
});
});
但是,当我创建yii2应用程序并粘贴此代码时,它无法正常工作。然后,我创建了新的menu_navigate.js js文件并粘贴了像
这样的代码$(function() {
$('a[href*="#"]:not([href="#"])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html, body').animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
});
});
我使用以下代码在ThemeAsset中注册了此代码:
public $js = [
'Index/menu_navigate.js'
]
但是,这段代码并没有帮助我,也没有用。我无法找到任何错误。
在控制台屏幕中显示以下错误消息
GET http://all/themes/CompanyProfile/Index/menu_navigate.js
(未找到)
答案 0 :(得分:0)
使用' /Index/menu_navigate.js' ;,这将帮助您获得正确的路径。
答案 1 :(得分:0)
如果此文件位于Web可访问目录之外,则需要在资产包中设置正确的sourcePath
:
<?php
namespace app\assets;
use yii\web\AssetBundle;
class MenuNavigationAsset extends AssetBundle
{
public $sourcePath = '@bower/font-awesome'; // Replace with folder where "Index" folder is located. Path should be absolute, you can use aliases here.
public $js = [
'Index/menu_navigate.js',
];
}
然后它将被复制到Web可访问目录并从那里加载。您可以使用官方文档来定义别名here。它可以防止您对绝对路径进行硬编码。
否则(如果文件位于Web可访问目录中),请设置basePath
和baseUrl
属性:
<?php
namespace app\assets;
use yii\web\AssetBundle;
class MenuNavigationAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $js = [
'Index/menu_navigation.js',
];
}
准确检查浏览器尝试加载此js文件的路径,并确保路径正确时存在文件,否则请修改资产包中的路径。
同时检查拼写错误的路径。
有关使用资产的官方文档here。