Javascript Uncaught TypeError:无法设置属性' onclick'为null

时间:2018-02-28 15:46:40

标签: javascript

这是来自我的控制台的错误,来自下面的脚本,

未捕获的TypeError:无法设置属性' onclick'为null

<script>
                document.getElementById("finish_$pend[contractID]").onclick=function() {
                        if (document.getElementById("finish_$pend[name]_$i").style.display==="none") {
                        document.getElementById("finish_$pend[name]_$i").style.display="block";}
                        else {
                        document.getElementById("finish_$pend[name]_$i").style.display="none"}}
            </script>


Heres the HTML Markup, for the script posted above

<div class="panel-body text-center">
            <table class='table table-responsive'>
            <?php 
            $user=$this->session->user_id;
            $pending = $database->select("tbl_contract", "name, amount, contractID","userID = ".$user." AND paid = 1 AND confirmed = 0", "date ");
            $i=1;
            if (is_array($pending)) {
            foreach($pending as $pend) { print <<<HERE
            <tr>
            <td>
            <div style="border-bottom: 1px solid gainsboro; padding-bottom: 10px; text-align: left; color: grey">
            <span>$i.  $pend[name] - $$pend[amount]</span>
            <!--<button id="finish_$pend[contractID]" style="position: absolute; right: 50px;  background: orange; color: white; border-radius: 3px; margin-top: 3px; border: 1px solid orange">Checkout</button> -->
            </td>

            </tr>
                    </div>

1 个答案:

答案 0 :(得分:0)

您的问题摘要 根据您发布的内容我的理解是,您尝试将事件设置为函数时会出现错误,这是不可能的。

编辑:
在查看了自发布以来的HTML标记后,我可以看到您要执行的操作,看起来您尝试根据显示与否之间的onclick事件来回切换元素的显示

解决方案

  1. 向HTML DOM元素添加onclick属性,例如onclick =“funNameInJS()”
  2. 为单击添加一个事件侦听器,然后测试元素ID名称以查看它们是否单击了您期望的对象(最好使用第一种方法)
  3. 但是,您无法将事件侦听器(onclick)设置为函数。 你似乎在做什么。

    已编辑的帖子 由于您已发布HTML标记,因此我建议

    function funToggleDisplay(elName){
      var el = document.getElementById(elName);
      if(el.style.display=="block" || el.style.display==""){
        el.style.display="none";
      }else{
        el.style.display="block"
      }
    }
    .divToControlToggle{
      border-bottom: 1px solid gainsboro; 
      padding-bottom: 10px; 
      text-align: left; 
      color: grey; 
      width: 100%; 
      background: lime
    }
    .table-responsive{
      width: 100%;
    }
    <div class="panel-body text-center">
      <table class='table table-responsive'>
        <tr>
          <td onclick="funToggleDisplay('amounts')">Click me to hide and show the amounts</td>
        </tr>
        <tr>
          <td id="amounts">
            <div onclick="funToggleDisplay('amounts')" class="divToControlToggle">
              <span>$50.00</span>
            </div>
          </td>
        </tr>
      </table>
    </div>

    注意: 您的HTML无效,您没有按正确的顺序关闭DIV /表元素