Javascript MathJax 3完成排版时发生的事件

Javascript MathJax 3完成排版时发生的事件,javascript,mathjax,Javascript,Mathjax,我正在使用MathJax 3渲染数学方程。问题是我需要在数学公式中的一些符号中添加一个单击事件,因此我使用\cssId loader: { load: ['[tex]/color','[tex]/cancel'], }, tex: { packages: {'[+]': ['cancel']}, inlineMath: [['$', '$'], ['\\(', '\\)']],

我正在使用MathJax 3渲染数学方程。问题是我需要在数学公式中的一些符号中添加一个单击事件,因此我使用
\cssId


        loader: {
          load: ['[tex]/color','[tex]/cancel'],

        },

        tex: {
          packages: {'[+]': ['cancel']},
          inlineMath: [['$', '$'], ['\\(', '\\)']],
        },
    };
    </script>
    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
     <p id="demo">  ${x^2+4\cssId{someid}{x}+\sum_{s}}$ </p>
    <script>$("#someid").click(function () {
      some code ....
    })
  </script>

加载器:{
加载:['[tex]/color','[tex]/cancel'],
},
特克斯:{
包:{'[+]':['取消']},
inlineMath:[['$','$'],['\\(','\\)']],
},
};

${x^2+4\cssId{someid}{x}+\sum{s}$

$(“#someid”)。单击(函数(){ 一些代码。。。。 })
由于尚未创建id=“”,因此单击事件不起作用。我试着在MathJax这样的排版之后使用承诺

<script>
$(document).ready(function () {
  MathJax.startup.promise.then(function () {
      $("#someid").click(function () {
  some code ....
})
  })
})

$(文档).ready(函数(){
MathJax.startup.promise.then(函数(){
$(“#someid”)。单击(函数(){
一些代码。。。。
})
})
})

未捕获的TypeError:无法读取未定义的属性“promise”

我还尝试了MathJax.typesetPromise()。它也不起作用。
提前感谢。

这里有几个问题。首先,因为MathJax脚本具有
async
属性,所以您不知道它将在什么时候被处理,它可能在您的
$(document).ready()
调用之后,就像在这种情况下一样(因为
MathJax.startup
没有根据错误消息定义)。其次,
$(document).ready()
只表示主文档内容已经加载,而不是MathJax已经完成排版(甚至开始排版)。在您的例子中,您要求加载几个TeX扩展,这导致MathJax必须等待这些扩展到达后才能开始排版。
$(document).ready()
将在加载它们之前运行,因此在排版发生之前,以及在具有
someid
的元素可用之前运行

为了正确处理这个问题,您需要使用MathJax的ready函数


MathJax={
加载器:{
加载:['[tex]/color','[tex]/cancel']
},
特克斯:{
包:{'[+]':['cancel','color']},
inlineMath:[['$','$'],['\\(','\\')]]
},
启动:{
pageReady(){
返回MathJax.startup.defaultPageReady().then(函数(){
$(“#someid”)。单击(函数(){
警报('clicked!');
}).css(“光标”、“指针”);
});
}
}
};

${x^2+4\cssId{someid}{x}+\sum{s}$

这里有几个问题。首先,因为MathJax脚本具有
async
属性,所以您不知道它将在什么时候被处理,它可能在您的
$(document).ready()
调用之后,就像在这种情况下一样(因为
MathJax.startup
没有根据错误消息定义)。其次,
$(document).ready()
只表示主文档内容已经加载,而不是MathJax已经完成排版(甚至开始排版)。在您的例子中,您要求加载几个TeX扩展,这导致MathJax必须等待这些扩展到达后才能开始排版。
$(document).ready()
将在加载它们之前运行,因此在排版发生之前,以及在具有
someid
的元素可用之前运行

为了正确处理这个问题,您需要使用MathJax的ready函数


MathJax={
加载器:{
加载:['[tex]/color','[tex]/cancel']
},
特克斯:{
包:{'[+]':['cancel','color']},
inlineMath:[['$','$'],['\\(','\\')]]
},
启动:{
pageReady(){
返回MathJax.startup.defaultPageReady().then(函数(){
$(“#someid”)。单击(函数(){
警报('clicked!');
}).css(“光标”、“指针”);
});
}
}
};

${x^2+4\cssId{someid}{x}+\sum{s}$