我尝试使用值运行javascript函数但得到答案值是未定义的。
我想追加这个值
功能运行
myufunc("test msg");
码
function myufunc(val){
var script = document.createElement("script");
script.type = "text/javascript";
script.text = 'alert(val);';
document.body.appendChild(script);
}
答案 0 :(得分:7)
问题是您创建的脚本标记将包含alert(val)
,但val
尚未初始化;它确实存在于你的函数中 - 但是新创建的script-element不知道你指的是val
。
您可能希望元素最终包含alert("test msg");
:
function f(val){
var script = document.createElement("script");
script.type = "text/javascript";
script.text = 'alert("' + val + '");';
document.body.appendChild(script);
}
f ("test msg"); // will create a <script> containing `alert("test msg");`
注意:因为我们手动用双引号包装val
的内容,所以要小心,以便传入的值本身不包含< em> double-quote "
;这将打破&#34; 生成的&#34;代码。
答案 1 :(得分:1)
首先,“int”是Javascript中的保留字 -
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words
其次,你正在使用“val”,好像它是一个字符串,而不是一个变量。
init("test msg");
function init(val){
var script = document.createElement("script");
script.type = "text/javascript";
script.text = 'alert('+val+');';
document.body.appendChild(script);
}
答案 2 :(得分:1)
int是JavaScript中的保留字,所以绝对不要使用它。这很可能是您的代码无法正常工作的原因。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words
答案 3 :(得分:0)
问题是val
仅在myufunc
范围内可用,并且当您的脚本被追加时,它将在全局范围内执行,而不是在您的函数范围内执行。因此,val
未在全局范围内定义。
解决方案是创建一个全局变量并将其值设置为val
,然后在警报中使用全局变量。使用这种方式,不需要将变量连接到字符串中,因此您不会遇到包含引号和断开字符串的变量的问题。
<强> Fiddle 强>
function myufunc(val){
myValue = val; // create global
var script = document.createElement("script");
script.type = "text/javascript";
script.text = 'alert(myValue);'; // use the global
document.body.appendChild(script);
}
以下一切都有效:
myufunc('test');
myufunc('tes"t');
myufunc("tes't");