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