【问题标题】:Calling JavaScript function from PHP echo within a radio button在单选按钮中从 PHP 回显调用 JavaScript 函数
【发布时间】:2011-10-01 02:21:04
【问题描述】:

我有一系列单选按钮,onClick 将显示或隐藏一个 Div:

显示 Div:

<input type="radio" name="con[4]" value="1" onclick="toggleLayer4(this.checked);" id="con4" />

隐藏 Div:

<input type="radio" name="con[4]" value="0" onclick="toggleLayer4(!this.checked);" checked="checked" id="con4" />

JavaScript:

function toggleLayer4(val)
        {
            if(val == '1' || val === true)
            {
                document.getElementById('con4').checked = true;
                document.getElementById('con4PSTN').style.display = 'block';
            }
            else if(val == '0' || val === false)
            {
                document.getElementById('con4').checked = false;
                document.getElementById('con4PSTN').style.display = 'none';
            }
        }

现在的问题是,当调用页面时,我可以像这样检查单选按钮:

<input type="radio" name="con[4]" value="1" onclick="toggleLayer4(this.checked);" <? if ($conn_count[3] == 1){echo "checked=\"checked\"";}?> id="con4" />

但是如果选中了单选按钮,我需要调用 JavaScript 函数来显示 div,我尝试在标签内的 PHP if 语句中回显 toggleLayer4(this.checked);,但这似乎只是重新显示了html??

一定有办法,不是很精通JS。

干杯, B.

【问题讨论】:

    标签: php javascript radio-button


    【解决方案1】:

    这是一个普通的不显眼的 JavaScript,可以为您节省一些工作 - 请注意收音机上不再有事件处理程序。

    我给了他们唯一的 ID,这是强制性的。

    如果您需要将 jQuery 用于其他东西,这个脚本可以更优雅一些。

    我认为

    <input type="radio" name="con[1]" value="1" id="con1_1" />
    <input type="radio" name="con[1]" value="0" id="con1_0" />
    <input type="radio" name="con[2]" value="1" id="con2_1" />
    <input type="radio" name="con[2]" value="0" id="con2_0" />
    <input type="radio" name="con[3]" value="1" id="con3_1" />
    <input type="radio" name="con[3]" value="0" id="con3_0" />
    <input type="radio" name="con[4]" value="1" id="con4_1" />
    <input type="radio" name="con[4]" value="0" id="con4_0" />
    

    和匹配对象具有 conxPSTN 其中 x 是 con[x]

    中的数字
    window.onload=function() {
      var conLength = <?php echo count($con); ?>;
      for (var i=1;i<=conLength;i++) {
        var cons = document.getElementsByName("con["+i+"]");
        for (var j=0;j<cons.length;j++) {
          cons[j].onclick=function() {
            var id = this.id.split("_")[0];
            document.getElementById(id+"PSTN").style.display = (this.value==1)?"block":"none"
          }
          if (cons[j].checked) cons[j].click();
        }
      }
    }
    

    【讨论】:

    • 谢谢,我非常喜欢你的解决方案,虽然我遇到了麻烦,因为即使按钮​​被手动检查,相应的 Div 也不会显示,这是需要显示/隐藏的 div 的代码:
      PSTN 线路?

    • 哦,你猜对了!另外,在你回显 $con 的地方,没有 $con,总会有 10 个 Div 来显示......
    • +1 不过最好不要使用cons[j].onclick。使用addEventListener
    • @jrh 不,那我也需要 attachEvent - onclick 适用于我知道的所有浏览器。
    • @Bifterss - 如果可行,请随时accept the answer
    【解决方案2】:
       <input type="radio" name="con[4]" value="0" onclick="toggleLayer4(0);" checked="checked" id="con4" />
    
    
       <input type="radio" name="con[4]" value="1" onclick="toggleLayer4(1);" checked="checked" id="con4" />
     function toggleLayer4(val)
        {
        if(val){
         document.getElementById('con4PSTN').style.display = 'block';}
        else{
         document.getElementById('con4PSTN').style.display = 'none';
        }
        }
    

    【讨论】:

    • 您不能同时检查并且您没有检查代码中的检查值 onload。
    【解决方案3】:

    如果你是从 php 回显,那么你应该这样做

    echo "<script type='text/javascript'>toggleLayer4(this.checked);</script>";
    

    但你不能在那里使用this。您需要手动获取单选按钮的值并传递它

    编辑

    当您想在代码的某些部分显式调用函数并且 php 代码 not 带有&lt;script&gt; 标签时,就会出现这种情况。

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 2019-07-21
      • 2015-08-20
      • 1970-01-01
      • 2013-03-23
      • 2014-11-01
      • 2017-04-30
      • 2013-09-07
      • 2012-08-11
      相关资源
      最近更新 更多