2013-03-09 148 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是全局變量。您可以直接在函數中訪問。