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ていますが、引数なしで関数を呼び出しています。定義よりも少ない引数で関数を呼び出すと、渡さない関数には値が渡されますundefined。関数の引数にグローバルと同じ名前を付けたので、関数のコードからグローバルを「シャドウ」(隠蔽、非表示)し、代わりに引数にアクセスします。

3つの選択肢があります(すべてではなく、そのうちの1つだけを実行してください)。

  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渡す必要があります。syllabusLinkhref

<a href="javascript:syllabusLink(course_syllabus_code)"><img src="CourseButton3.png" />Syllabus</a>
于 2013-03-09T10:36:14.817 に答える
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

このビットは正しくありません:

javascript:syllabusLink()

パラメータが欠落しているため、関数を呼び出します

function syllabusLink(course_syllabus_code) {

の値course_syllabus_codeが設定されていません。

于 2013-03-09T10:36:16.510 に答える
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

course_syllabus_codeで引数として渡す必要がある簡単な答えfunctionfunction引数からそれを削除して試してください。

<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 に答える