2013-03-09 98 views
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> 
+2

你永远不会传递'course_syllabus_code',所以它显示为未定义,因为它不存在。 – 2013-03-09 10:35:08

+0

有没有问号? – QuentinUK 2013-03-09 10:38:55

回答

5

您将course_syllabus_code作为参数传递给该函数,但不带任何参数地调用该函数。当你调用的函数参数比它定义的参数更少时,那些你不通过的参数值为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,除非有它必须是一个全局变量,一个非常好的理由。

0

尝试这样

var course_syllabus_code = "72524"; 

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

由于的onClick()你不传递任何参数。

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

1

更改函数参数,因为它与本地变量名称相同。

var course_syllabus_code = "72524"; 

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

您应该href属性内通过course_syllabus_codesyllabusLink

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

此位是不正确:

javascript:syllabusLink() 

你缺少的参数,以便调用

function syllabusLink(course_syllabus_code) { 

course_syllabus_code的价值没有被设置的功能。

0

请不要使用除bookmarklet外的javascript:协议。

更好的代码,你需要通过course_syllabus_code作为参数在function

<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> 
0

简单的答案。从function的论点中删除它并尝试。

<script type="text/javascript"> 
var course_syllabus_code = "72524"; 
function syllabusLink() { 
    location.href = 'https://foo.com'+course_syllabus_code; 
} 
</script> 

而原因是course_syllabus_code是全局变量。您可以直接在函数中访问。