我有一个引用input
的函数,并相应地用最后一行更改它的值:
eval('document.forms[0].telephone').value = $telephone[$i];
但是,我需要将显示的内容移动到span
,并且需要正确引用它。目前,input
有一个name
和一个id
的“国家/地区”,我相信我的eval()
引用了name
。
我的搜索范围没有name
,而是有一个班级tel-prefix
。
我试图通过以下方式(以及它们的许多组合)来引用它,但没有一个工作:
eval('document.forms[0].tel-prefix').value = $telephone[$i];
eval('.tel-prefix').value = $telephone[$i];
eval('.tel-prefix').text= $telephone[$i];
$('.tel-prefix').value = $telephone[$i];
$('.tel-prefix').value($telephone[$i]);
如何让eval()
更改span
的值?
完整的JS
$telephone = new Array(4)
$telephone [0] = "+93"
...
$telephone [246] = "+260"
$telephone [247] = "+263"
function getTelephone($selectedIndex) {
$selectBox = document.forms[0].spch_country;
if ($selectBox.options[$selectedIndex].value != 'none') {
for ($j = 0, $i = $selectedIndex; $i < $selectedIndex + 1; $j++, $i++) {
eval('document.forms[0].tel-prefix').value = $telephone[$i];
}
}
}
答案 0 :(得分:1)
首先,使用eval
是完全没有根据的,因为没有什么需要以这种方式进行评估。原始代码应该只是:
document.forms[0].telephone.value = $telephone[$i];
eval
函数将字符串计算为代码,通常与cross site scripting attacks及类似的风险相关联。实际上从不需要使用eval
访问元素,即使使用动态字段名称,也可以通过名称访问它们而不使用eval
。例如:
var formNumber = 0;
var fieldName = "telephone";
document.forms[formNumber][fieldName].value = $telephone[$i];
回到span
;在现代浏览器中,您可以使用querySelector
method使用类名来查找它。然后使用innerHTML
属性设置内容:
document.querySelector('.tel-prefix').innerHTML = $telephone[$i];
要在较旧的浏览器中工作,如果您可以在范围中添加ID(例如id="telPrefix"
),则会有很多帮助,然后您可以使用getElementById
方法:
document.getElementById('telPrefix').innerHTML = $telephone[$i];
可以使用类名找到元素,但是您需要遍历页面中的所有元素,直到在不支持querySelector
方法的浏览器中找到它。