【问题标题】:Text boxes not disappearing after upper level parent changed上级父级更改后文本框不消失
【发布时间】:2016-09-05 04:06:53
【问题描述】:

在我的页面中,有3个级别的下拉选择框,子级被隐藏,直到父级被选中。

级别
健康测试组织(1 级)-> 测试类型(2 级)-> 测试结果(3 级)

在一条路线的最后,除了第3级的测试结果外,还出现了两个框(LDI和RDI)。问题是;虽然当我更改级别 3 时这些框会消失,但如果我更改级别 1 或 2,这些框不会消失。

这是我的问题的屏幕截图,
没有选择,

已选择 1 级,

已选择第 2 级,

已选择第 3 级并出现框,

并且问题,

我刚刚更改了上面的健康测试组织(1级),两个框(LDI和RDI)仍然存在。

顺便说一下,这是在 PHP 脚本中编码的那部分的 JavaScript;

function options($type)
{
    if($type== 'org')
    {
        return array('Not selected'=>'','OFA'=>'ofa','CERF'=>'cerf','CHIC'=>'chic','AHT'=>'aht','PennHip'=>'pennhip','Other'=>'other');
    }
    if($type== 'pass')
    {
        return array('Not selected'=>'','PASS'=>'1','FAIL'=>'0');
    }
    if($type== 'type')
    {
        return array('Not selected'=>'',
        'Eye (CERF)' => 'eye',
        'Cardiac (OFA)' => 'cardiac',
        'Elbow (OFA)' => 'elbow',
        'Hips (OFA)' => 'hips',
        'Patellar Luxation (OFA)' => 'pl',
        'Thyroid (OFA)' => 'thyroid',
        'DNA (OFA)' => 'dna',
        'Primary Open Angle Glaucoma (OFA)' => 'poag',
        'Other (not active yet)' => 'other',
        'Longevity (not active yet)' => 'longevity',
        'Genotype (not active yet)' => 'genotype',
        );
    }
    if($type== 'result')
    {

    }
}

function get_for_dog($id)
{
    $arr[':id'] = $id;
    $str = 'SELECT * FROM ' . $this->table . ' WHERE dog=:id';
    if ($this->obj_debug == 1 || $this->core_debug == 1)
        echo "$str<br>";
    return $this->run_query($str,$arr);
}

function resultdd($test,$result)
{
        $list = array();
        foreach($this->testresults as $txt => $val)
        {
            if(strstr($val,$test.'.') ||$val =='' )
            {
                $list[$txt] = $val; 
            }
        }
        if(sizeof($list) > 0 && $test != '')
        {
            $buf = '<select name="rating">';
            foreach($list as $txt =>$val)
            {
                $buf .= '<option value="'.$val.'" ';
                if($val == $result)
                    $buf .= ' selected ';
                $buf .= '>'.$txt.'</option>
                ';
            }
            $buf .= '</select>';
        }
    return $buf;
}

function customFields($i=0,$r='')
{
    $buf = '';
    if($this->data[$i]['rating'] =='pennhip.ldirdi' || $r =='pennhip.ldirdi')
    {
        $dft = array('ldi'=>'','rdi'=>'');
        if($this->data[$i]['rating_data'] != '')
        {
            $dat = json_decode($this->data[$i]['rating_data'],true);
            if(sizeof($dat) == 2)
                $dat=$dat;
            else
                $dat = $dft;
        }
        else
            $dat = $dft;    
        $buf .= 'LDI <input type="text" name="rating_data[]" value="'.$dat['ldi'].'" /><br><br>';
        $buf .= ' <input type="hidden" name="rating_key[]" value="ldi" />';
        $buf .= 'RDI <input type="text" name="rating_data[]" value="'.$dat['rdi'].'" /><br><br>';
        $buf .= ' <input type="hidden" name="rating_key[]" value="rdi" />';
    }
    return $buf;
}

我确信有办法摆脱这些盒子,我将不胜感激。

【问题讨论】:

    标签: javascript php html html-select cascadingdropdown


    【解决方案1】:

    这实际上看起来很令人困惑,但是您首先要如何使 LDI/RDI 显示?

    一目了然的最简单的解决方案是在更改测试类型时将输入的样式更改为display: none,这可以通过onchange() 完成。

    【讨论】:

    • 正在做的事情是如果“测试结果”选择为“LDI / RDI - PennHip”,这些框将使用我在问题中显示的代码添加到页面中。而且,我没有在这个网站上创建这个框架或任何代码,我只是添加了一些功能并更正了一些类似的东西。不幸的是,我在 JavaScript、HTML 或 PHP 方面足够好,可以理解您的建议。您能解释一下如何进行这些更改吗?
    • 这4行对网页的整体设计帮助不大。我们需要看看当你点击“测试类型”时会发生什么。尝试找到与“测试类型”选择框相关的代码,以便我们可以看到“onchange”期间发生了什么。另外,这是否使用 jquery?
    • 我更新了代码以更清楚地解释 PHP 的作用。我希望它有所帮助。而且,是的,它使用 jquery。
    • 那么customFields 是什么?并检查if($this-&gt;data[$i]['rating'] =='pennhip.ldirdi' || $r =='pennhip.ldirdi') 是否始终在运行,无论输入如何。因为如果是这样,那么这很可能是您的问题,因为$buf 总是会给您返回&lt;input&gt; 的东西。
    【解决方案2】:

    我发现在 JavaScript 中控制 2 级和 3 级的函数在运行时不会将该标记 (cfs) 设置为空。因此,为了解决这个问题,我在这些函数中添加了几行代码,以便在每次运行时将该标记设置为空。

    这是我添加的代码和行,

    function popResults()
    {
        $("#cfs").html(""); // <-- added this line
        var t = '';
        if($( "select[name='type'] option:selected" ).val().length >0)
            t = $( "select[name='type'] option:selected" ).val();
        else
            t =$( "#testtypes" ).attr("data-type");
    
        $.ajax({url: "ajax_results.php?test="+t+"&result=" + $( "#testresults" ).attr("data-result"), success: function(result){      
            $("#testresults").html(result);
            $("select[name='rating']").change(function() {
                $.ajax({url: "ajax_customFields.php?r="+$( "select[name='rating'] option:selected" ).val(), success: function(result){
                    $("#cfs").html(result); // <-- already there
                }});
            });        
        }});
    }
    
    function popTypes()
    {
        $("#cfs").html(""); // <-- added this line
        $.ajax({url: "ajax_types.php?org="+$( "select[name='org'] option:selected" ).val()+"&type=" + $( "#testtypes" ).attr("data-type"), success: function(result){
            $("#testresults").html('');
            $("#testtypes").html(result);
            $( "select[name='type']" ).val('');
            $("select[name='type']").change(function() {
                popResults();
            });     
        }});
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2011-08-10
      • 2022-08-20
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      相关资源
      最近更新 更多