Javascript 上层父级更改后文本框不消失

Javascript 上层父级更改后文本框不消失,javascript,php,html,html-select,cascadingdropdown,Javascript,Php,Html,Html Select,Cascadingdropdown,在我的页面中,有3个级别下拉选择框,在选择父级之前,子级将隐藏 级别 健康检测机构(一级)->检测类型(二级)->检测结果(三级) 在一条路线的末尾,除了3级的测试结果外,还会出现两个方框(LDI和RDI)。问题是,;虽然当我更改级别3时这些框消失了,但是如果我更改级别1或2,这些框不会消失 以下是我的问题的屏幕截图, 无选择, 已选择级别1, 已选择级别2, 选择级别3并显示框, 还有问题, 我刚刚改变了上面的健康测试组织(1级),两个盒子(LDI和RDI)仍然存在 顺便说一下,这里

在我的页面中,有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;
}
功能选项($type)
{
如果($type=='org')
{
返回数组('notselected'=>'、'OFA'=>'OFA'、'CERF'=>'CERF'、'CHIC'=>'CHIC'、'AHT'=>'AHT'、'PennHip'=>'PennHip'、'Other'=>'Other');
}
如果($type=='pass')
{
返回数组('notselected'=>'','PASS'=>'1','FAIL'=>'0');
}
如果($type=='type')
{
返回数组('未选择'=>'',
“眼睛(CERF)”=>“眼睛”,
“心脏(OFA)”=>“心脏”,
“弯头(OFA)”=>“弯头”,
‘Hips(OFA)’=>‘Hips’,
“髌骨脱位(OFA)”=>“pl”,
“甲状腺(OFA)”=>“甲状腺”,
“DNA(OFA)”=>“DNA”,
“原发性开角型青光眼(OFA)”=>“poag”,
'其他(尚未激活)'=>'其他',
“寿命(尚未激活)”=>“寿命”,
'基因型(尚未激活)'=>'基因型',
);
}
如果($type=='result')
{
}
}
函数get_for_dog($id)
{
$arr[':id']=$id;
$str='SELECT*FROM'.$this->table.'WHERE dog=:id';
如果($this->obj|u debug==1 ||$this->core_debug==1)
回声“$str
”; 返回$this->run\u查询($str,$arr); } 函数resultdd($test,$result) { $list=array(); foreach($txt=>val形式的此->测试结果) { if(strstr($val,$test.')| |$val=='') { $list[$txt]=$val; } } 如果(sizeof($list)>0&&$test!='') { $buf=''; foreach($txt=>$val) { $buf.=''.$txt.' '; } $buf.=''; } 返回$buf; } 函数customFields($i=0,$r='') { $buf=''; 如果($this->data[$i]['rating']=='pennhip.ldirdi'| |$r=='pennhip.ldirdi') { $dft=数组('ldi'=>'','rdi'=>''; 如果($this->data[$i]['rating_data']!='') { $dat=json_decode($this->data[$i]['rating_data'],true); 如果(sizeof($dat)==2) $dat=$dat; 其他的 $dat=$dft; } 其他的 $dat=$dft; $buf.=“本地设计院

”; $buf.=''; $buf.=“RDI

”; $buf.=''; } 返回$buf; }

我相信有办法摆脱这些盒子,我非常感谢您的帮助。

这看起来确实令人困惑,但您首先要做什么才能让LDI/RDI显示出来


简单地看一下,最简单的解决方案就是在更改测试类型时将输入的样式更改为
display:none
,这可以通过
onchange()

完成。我发现,在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();
        });     
    }});
}
函数popResults()
{
$(“#cfs”).html(“”;//0)
t=$(“选择[name='type']选项:已选定”).val();
其他的
t=$(“#测试类型”).attr(“数据类型”);
$.ajax({url:“ajax_results.php?test=“+t+”&result=“++$(“#testresults”)).attr(“数据结果”),成功:函数(结果){
$(“#testresults”).html(结果);
$(“选择[name='rating']”)。更改(函数(){
$.ajax({url:“ajax_customFields.php?r=“+$”(“选择[name='rating']选项:选定”).val(),成功:函数(结果){

$(“#cfs”).html(result);//如果“Test result”选择了“LDI/RDI-PennHip”,则需要执行以下操作,这些框是用我在问题中展示的代码添加到页面上的。而且,我没有在这个网站上创建这个框架或任何代码,我只是添加了一些功能并更正了类似的som内容。不幸的是,我在JavaScript、HTML或PHP方面足够好,可以理解你的建议。你能解释一下如何做这些更改吗?Those 4行对网页的整体设计没有什么帮助。我们需要看看当你点击“测试类型”时会发生什么。试着找到与“测试类型”选择框相关的代码,这样我们就可以看到在“onchange”期间会发生什么。此外,这是否使用jquery?我更新了代码,以更清楚地解释PHP的功能。我希望它能有所帮助。是的,它使用jquery。那么调用的是
customFields
?并检查
是否($this->data[$i]['rating']=='pennhip.ldirdi'| |$r=='pennhip.ldirdi'))
总是在运行,不管输入是什么。因为如果是这样,那很可能是您的问题,因为
$buf
总是会返回
内容。