使用eval引用span元素

时间:2014-07-29 09:36:09

标签: javascript

我有一个引用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];
        }
    }
}

1 个答案:

答案 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方法的浏览器中找到它。