我在学习管理系统中工作并创建一些自定义组件
这是返回url但是“course_syllabus_code”在url后显示为undefined。我是Javascript的初学者,已经在Google上查看了其他一些答案,但仍然无法理解。
基本上,用户可以打开代码并在顶部输入变量(将有多个)。接下来是所有魔法应该发生的地方......
输入的变量的结构不能改变,但可能没有以最佳方式执行“魔法”。
<script type="text/javascript">
var course_syllabus_code = "72524";
function syllabusLink(course_syllabus_code) {
location.href = 'https://foo.com'+course_syllabus_code;
}
</script>
<ul>
<li><a href="javascript:syllabusLink()"><img src="CourseButton3.png" />Syllabus</a></li>
</ul>
答案 0 :(得分:5)
您将course_syllabus_code
作为参数传递给函数,但调用函数时没有任何参数。当您调用参数少于其定义的函数时,您未传递的函数将使用值undefined
。由于您已经为函数参数赋予了与全局相同的名称,因此它会从函数中的代码“阴影”(隐藏,隐藏)全局,而代码将访问参数。
你有三个选择(只做一个,而不是全部):
通过删除声明的函数参数来使用全局:
function syllabusLink() {
// Removed here ------^
或,将全局传递到您调用它的函数中:
<a href="javascript:syllabusLink(course_syllabus_code)"><img src="CourseButton3.png" />Syllabus</a>
我可能也会更改参数的名称(这里我使用了scode
):
function syllabusLink(scode) {
location.href = 'https://foo.com'+scode;
}
或,不要让course_syllabus_code
成为全局,并将其传递给函数:
<a href="javascript:syllabusLink('72524')"><img src="CourseButton3.png" />Syllabus</a>
我可能会选择#3,除非有一个非常好的理由它必须是全局变量。
答案 1 :(得分:1)
更改函数参数,因为它与局部变量的名称相同。
var course_syllabus_code = "72524";
function syllabusLink(code) {
location.href = 'https://foo.com' + code;
}
您应该在course_syllabus_code
属性中将syllabusLink
传递给href
。
<a href="javascript:syllabusLink(course_syllabus_code)"><img src="CourseButton3.png" />Syllabus</a>
答案 2 :(得分:0)
试试这个
var course_syllabus_code = "72524";
function syllabusLink() {
location.href = 'https://foo.com'+course_syllabus_code;
}
因为在onClick()中你没有传递任何参数。
course_syllabus_code 是全局变量。您可以直接在函数中访问。
答案 3 :(得分:0)
这位不正确:
javascript:syllabusLink()
您缺少参数,因此调用函数
function syllabusLink(course_syllabus_code) {
未设置course_syllabus_code
的值。
答案 4 :(得分:0)
除了bookmarklet外,请不要使用javascript:协议。
更好的代码就是这个
<script type="text/javascript">
function syllabusLink(course_syllabus_code) {
location.href = 'https://foo.com/course?syllabus='+course_syllabus_code;
return false; // cancel link
}
</script>
<ul>
<li><a href="#" onclick="return syllabusLink('72524')"><img src="CourseButton3.png" />Syllabus</a></li>
</ul>
或
此
<script type="text/javascript">
var course_syllabus_code="72524";
function syllabusLink() {
location.href = 'https://foo.com/course?syllabus='+course_syllabus_code;
return false; // cancel link
}
</script>
<ul>
<li><a href="#" onclick="return syllabusLink()"><img src="CourseButton3.png" />Syllabus</a></li>
</ul>
答案 5 :(得分:0)
简单回答您需要在course_syllabus_code
中将function
作为参数传递。只需从function
参数中删除它,然后尝试。
<script type="text/javascript">
var course_syllabus_code = "72524";
function syllabusLink() {
location.href = 'https://foo.com'+course_syllabus_code;
}
</script>
原因是course_syllabus_code
是全局变量。您可以直接在函数中访问。