2013-03-09 2 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', поэтому он отображается как неопределенный, потому что его нет. –

+0

Есть вопросительный знак отсутствует? – QuentinUK

ответ

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; 
} 

Вы должны пройти course_syllabus_code к syllabusLink в атрибуте href.

<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

Пожалуйста, никогда не используйте протокол 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> 
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 является глобальным переменными .ВЫ могут получить доступ непосредственно в функции.