【问题标题】:Variable error in function called in InnerHTML在 InnerHTML 中调用的函数中的变量错误
【发布时间】:2015-07-04 13:14:13
【问题描述】:

我是编码新手,遇到从 innerhtml 调用函数的问题。我怀疑问题可能与 innerhtml 语法有关。 有问题的部分是:

document.getElementById('arrowback').innerHTML = "<a href='#' onclick='return imtest(icount,imname);'><img src=/Images/ib/A2.png></a>";

如果我将语法更改为以下,那么它适用于 icount,它是一个数值,不适用于 imname:

document.getElementById('arrowback').innerHTML = "<a href='#' onclick='return imtest("+icount+");'><img src=/Images/ib/A2.png></a>";

我想通过 innerhtml 方法调用带有 2 个变量的 imtest 函数。以下是完整代码供参考:

<script type="text/javascript">
    function clicker(buildname, imname, icount){
        var displaybox=document.getElementById('displaybox');

        if (displaybox.style.display === "none") {
            alert(imname);

            document.getElementById('imagebox').innerHTML = "<img src=" + imname + icount+".jpg height='400'>";
            document.getElementById('arrowback').innerHTML = "<a href='#' onclick= 'return imtest(icount,imname);'><img src=/Images/ib/A2.png></a>";
            document.getElementById('btitle').innerHTML = buildname;
        } else {
            document.getElementById('displaybox').style.display = "none";
        }
        return false;
    }

    function imtest(icount, imname) {
        alert(icount);
    }
</script>

【问题讨论】:

    标签: javascript html variables innerhtml


    【解决方案1】:

    你只需要在imname周围加上引号:

    document.getElementById('imagebox').innerHTML = '<img src="' + imname + icount + '.jpg" height="400">';
    document.getElementById('arrowback').innerHTML = '<a href="#" onclick="return imtest(' + icount + ', \"' + imname + '\");"><img src="/Images/ib/A2.png"></a>';
    

    顺便说一句,您忘记了 src 两个属性值的引号,我已经添加了它们,并且我冒昧地将您使用的引号更改为 HTML 中的双引号。

    this codepen

    【讨论】:

    • 查看分配的结果,而不是document.getElementById('arrowback').innerHTML = '&lt;a href="#" onclick="return imtest(' + icount + ', \"' + imname + '\"');"&gt;&lt;img src="/Images/ib/A2.png"&gt;&lt;/a&gt;'; - 执行console.log('&lt;a href="#" onclick="return imtest(' + icount + ', \"' + imname + '\"');"&gt;&lt;img src="/Images/ib/A2.png"&gt;&lt;/a&gt;';) - 然后看看你是否可以看到为什么你需要控制台输出中的引号
    • 因为当你输出它时,它会打印在 HTML 中。假设var iname = 'abc'。在您注入的 HTML 中,它现在是 myFunction(abc)。当它被评估时,它试图找到不存在的变量“abc”。虽然它周围有引号 (myFunction("abc")),但它现在有一个字符串作为参数。
    • @jerska 谢谢 上面的方法我试过了,还是不行,函数imtest还是没有被调用,你确定引号的位置吗?
    • @1dxb 你能再检查一下吗?我多了一个单引号。
    • @Jerska 进行了更改,但它仍然顽固地拒绝调用函数 imtest!
    【解决方案2】:

    工作代码...

    Javascript

    function imtest(icount, imname){
      alert("icount:" + icount + "\n imname: " + imname);
    }
    function clicker(buildname,imname,icount){
    
    var displaybox=document.getElementById('displaybox');
    
    if(displaybox.style.display == "none"){
        displaybox.style.display = "block";
        document.getElementById('imagebox').innerHTML = "<img src='" + imname + icount+".jpg' height='400'>";
        document.getElementById('arrowback').innerHTML = "<a onclick='return imtest(" + icount + "," + '"' + imname + '"' + ");'><img src='Images/ib/A2.png'></a>";
        document.getElementById('btitle').innerHTML = buildname;
    
    }else{  
      document.getElementById('displaybox').style.display = "none";
    }
    }
    

    HTML

    <div id="displaybox" style="display: none;">
      <h1 id="btitle"></h1>
      <div id="imagebox"></div>
      <div id="arrowback"></div>
    </div>
    <button onclick="clicker('buildname', 'imname', 'icount');">Clicker</button>
    

    【讨论】:

    • 不工作的部分是 onclick='return imtest(" + icount + "," + imname + "),它没有调用 imtest 函数,调用时应该给出基本警报..
    • 不走运,没用。帮助缩小范围;每当函数中包含变量 imname (string) 时,代码都会失败,但是数字 icount 可以正常工作。我在函数 clicker () 的第一行放置了 alert(imname) 代码,变量返回了一个正常的字符串值。之后,似乎有什么东西阻止了该值被推入 innerHTML 元素
    • 感谢您按照您的建议对 arrowback innerhtml 代码进行了更改,现在它可以完美运行了!
    【解决方案3】:

    在 imtest 函数中,您只传递一个参数,而 onclick 则接受两个参数。检查它 在接受的同时,你应该这样写。

      document.getElementById('arrowback').innerHTML = '<a href="#" onclick="return imtest(' + icount + ', \"' + imname + '\"');"><img src="/Images/ib/A2.png"></a>';
    

    【讨论】:

    • 感谢我将 imtest 函数更改为采用 2 个参数,并对 arrowback innerhtml 行进行了更改,但是仍然没有调用 imtest。
    • 用这个检查一下.. (" + icount + "," + imname + ");
    • 上述不适用于imname,它适用于icount。 imname 是一个字符串变量,它是一个图像路径,
    • 你可以再做一件事。 var iCountValue= document.getElementById('arrowback').innerHTML = '';然后给alert(iCountValue);使用新变量对 iname 执行相同操作..
    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 2014-08-05
    • 2012-05-23
    • 2015-10-25
    • 2017-03-06
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多