开发者问题收集

Unturect typeError:在更改IMG的SRC时无法设置NULL的属性'SRC'[封闭]

2018-01-19
105

我希望当我点击 IMG 时更改其 src。 这是我的 div:

<div class="character">
<input id="1200" name="vocation_select" type="radio" value="1200" style="display: none" ></input>
<label id="label_profesji" for="1200">
    <img id="1200voc" onclick="onChange(this.id)" src="engine/images/proffesion/1200voc.png" width="34px" height="34px" style="cursor: pointer" title="Bardock"> 
</label>

和 javascript:

<script>
    function onChange(id){
        var names = ("1200voc");
        for (x = 0; x < names.length; x++) {
            var prof = document.getElementById(names[x]);
            prof.src = 'engine/images/proffesion/' + names[x] + '.png';  
        }

        var prof = document.getElementById(id);
        prof.src = 'engine/images/proffesion/' + prof.id + '_s.png';     
    }; 
</script>

错误是:

Uncaught TypeError: Cannot set property 'src' of null while changing SRC of img

为什么这不起作用?

2个回答

查看您的代码,您会执行以下操作:

var names = ("1200voc")

然后尝试将 names 作为数组访问。

因此:

for (x = 0; x < names.length; x++) {
    var prof = document.getElementById(names[x]);
    prof.src = 'engine/images/proffesion/' + names[x] + '.png';  
}

意味着 names[0] 将返回 1names[1] 将返回 2names[2] 将返回 0 ,依此类推...

现在没有 id 为 12 的元素...因此当您执行以下操作时:

var prof = document.getElementById(names[x]);

您会收到错误。

您想要的是一个名称数组,因此您应该做的是:

var names = ["1200voc"]

这个这样您就可以正确地将 names 作为您想要的格式的数组循环。

Ayo K
2018-01-19

Names 不是数组,而是字符串。

将您的行更改为 var names = ["1200voc"];

James Johnson
2018-01-19