2

我正在学习管理系统中工作并创建一些自定义组件

这正在返回 url,但“course_syllabus_code”在 url 之后显示为未定义。我是 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>
4

6 回答 6

7

您将course_syllabus_code作为参数传递给函数,但在没有任何参数的情况下调用函数。当您调用一个参数少于其定义的函数时,您未传递的参数将与 value 一起传递undefined。由于您已为函数参数赋予与全局相同的名称,因此它会从函数中的代码中“遮蔽”(模糊、隐藏)全局,这将改为访问该参数。

你有三个选择(只做其中一个,而不是全部):

  1. 通过仅删除声明的函数参数来使用全局:

    function syllabusLink() {
    // Removed here ------^
    
  2. 或者,将全局传递给您调用它的函数:

    <a href="javascript:syllabusLink(course_syllabus_code)"><img src="CourseButton3.png" />Syllabus</a>
    

        我可能也会更改参数的名称(这里我使用过scode):

    function syllabusLink(scode) {
        location.href = 'https://foo.com'+scode;
    }
    
  3. 或者,根本不创建course_syllabus_code全局变量,并将其传递给函数:

    <a href="javascript:syllabusLink('72524')"><img src="CourseButton3.png" />Syllabus</a>
    

我可能会选择#3,除非有一个很好的理由它必须是一个全局变量。

于 2013-03-09T10:39:02.877 回答
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>
于 2013-03-09T10:36:14.817 回答
0

像这样试试

  var course_syllabus_code = "72524";

function syllabusLink() {
location.href = 'https://foo.com'+course_syllabus_code;
}

因为在 onClick() 你没有传递任何参数。

course_syllabus_code是全局变量,可以直接在函数中访问。

于 2013-03-09T10:34:55.913 回答
0

此位不正确:

javascript:syllabusLink()

您缺少参数,因此调用该函数

function syllabusLink(course_syllabus_code) {

的值course_syllabus_code未设置。

于 2013-03-09T10:36:16.510 回答
0

请不要使用 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>
于 2013-03-09T10:43:17.897 回答
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全局变量。您可以直接在函数中访问。

于 2013-03-09T10:46:32.887 回答