簡體   English   中英

innerHTML添加腳本導致錯誤

[英]innerHTML adding scripts causes error

這是我用來為TeX添加腳本的函數:

function change() {
        var format = document.getElementById("format");
        var original_text = document.getElementById("question");
        var s = document.createElement('script');
        s.setAttribute('type', 'math/tex; mode=display');
        s.value = {x};
        var newdiv = document.createElement('div');
        newdiv.innerHTML = s.toString();
        document.body.appendChild(newdiv);
    }

但這顯示為ReferenceError: Can't find variable: change的錯誤ReferenceError: Can't find variable: change

我哪里做錯了?

它拒絕此行:

s.value = {x};

括號用於JSON(JavaScript對象表示法) Javascript的對象文字語法。 期望您完成一個哈希圖,如下所示:

s.value = {x: 'someValue'}

您的結尾括號是意外的。 但是,您真正想要的是一個字符串。 就Java而言,字符串對LaTex意味着特殊的事實只是一個巧合:

s.value = '{x}';

這是否達到您的最終目標還有待觀察,但是如果沒有達到目標,您可能需要提出一個單獨的問題。 快樂編碼<3

我想您可能想做些類似的事情:

function change() {
    var format = document.getElementById("format");
    var original_text = document.getElementById("question");
    var s = document.createElement('script');
    s.setAttribute('type', 'math/tex; mode=display');
    s.innerHTML = "{x}";
    var newdiv = document.createElement('div');
    newdiv.appendChild(s);
    document.body.appendChild(newdiv);
}

調用change()函數會在<body>標簽的末尾添加一個帶有script標簽的div ,如下所示:

<div><script type="math/tex; mode=display">{x}</script></div>

我終於弄清楚了我的問題所在。 這是我在html頁面中轉換或渲染MathJax腳本的錯誤方式。 應該這樣修復:

添加另一個腳本:

<script>
  //
  //  Use a closure to hide the local variables from the
  //  global namespace
  //
  (function () {
    var QUEUE = MathJax.Hub.queue;  // shorthand for the queue
    var math = null;                // the element jax for the math output.

    //
    //  Get the element jax when MathJax has produced it.
    //
    QUEUE.Push(function () {
      math = MathJax.Hub.getAllJax("MathOutput")[0];
    });

    //
    //  The onchange event handler that typesets the
    //  math entered by the user
    //
    window.UpdateMath = function (TeX) {
      QUEUE.Push(["Text",math,"\\displaystyle{"+TeX+"}"]);
    }
  })();
</script>

然后可以輕松地將其轉換為:

<p>
Type some TeX code: (Example: \int\sin{x}\;{dt})
</p>
<input id="MathInput" class="form-control" type="text" size="50" onchange="UpdateMath(this.value)" />
<p>

<div id="MathOutput">
You typed: ${}$
</div>

輸出如下:

在此處輸入圖片說明

感謝@DemoUser的寶貴回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM