简体   繁体   English

Javascript 3下拉菜单。 更改一个下拉菜单时,请为其他两个下拉菜单设置默认值。 需要优化

[英]Javascript 3 drop down menus. On change of one drop down menu set default value for other two drop down menus. Need optimization

Code is very long. 代码很长。 But from my opinion to show what is necessary I must post whole code. 但是从我的观点来看,必须显示整个代码。

Three drop down menus. 三个下拉菜单。 Php and javascript are used. PHP和JavaScript的使用。 If in one of menu change value, then values in the other two menus are set to default. 如果在菜单更改值之一中,则将其他两个菜单中的值设置为默认值。

Created long code that would need to be improved/optimized (javascript would be necessary to make shorter). 创建的长代码需要改进/优化(需要使用JavaScript来缩短代码长度)。

Posted code (without php) here http://jsfiddle.net/rigaconnect/QaUmK/5/ (for not understandable reasons posted code in jsfiddle is not fully working; On my website the code works as expected.) 在此处发布代码(无php) http://jsfiddle.net/rigaconnect/QaUmK/5/ (出于无法理解的原因,在jsfiddle中发布的代码无法正常工作;在我的网站上,该代码按预期工作。)

At first php 起初php

$options_month = array("Select month", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$options_quarter = array("Select quarter", "First", "Second", "Third", "Fourth");
$options_halfyear = array("Select half-year", "First", "Second");

Then drop down menus 然后下拉菜单

<select id="month_id" name="monthid">
<?php
foreach ( $options_month as $i1=>$opt1 ) : 
echo '<option value="' .htmlspecialchars($i1) .'"' .((htmlspecialchars($i1) == htmlspecialchars($_POST['monthid'][$counter]))? 'selected' : "") .'>'.htmlspecialchars($opt1) .'</option>';
endforeach;
?>
</select>

<select id="quarter_id" name="quarterid">
<?php
foreach ( $options_quarter as $i1=>$opt1 ) : 
echo '<option value="' .htmlspecialchars($i1) .'"' .((htmlspecialchars($i1) == htmlspecialchars($_POST['quarterid'][$counter]))? 'selected' : "") .'>'.htmlspecialchars($opt1) .'</option>';
endforeach;
?>
</select>

<select id="halfyear_id" name="halfyearid">
<?php
foreach ( $options_halfyear as $i1=>$opt1 ) : 
echo '<option value="' .htmlspecialchars($i1) .'"' .((htmlspecialchars($i1) == htmlspecialchars($_POST['halfyear'][$counter]))? 'selected' : "") .'>'.htmlspecialchars($opt1) .'</option>';
endforeach;
?>
</select>

And then javascript that would need to improve. 然后需要改进的javascript。 Code is very long. 代码很长。 Possibly the same can do with shorter code. 可能对于较短的代码也可以这样做。

var month_for_update = document.getElementById( 'month_id' );
function updateQuarterHalfyear ( e ) {

var quarter = this.options[ this.selectedIndex ].value, quarterDDL= document.getElementById( 'quarter_id' ), quarter, i = quarterDDL.options.length - 1;

var halfyear = this.options[ this.selectedIndex ].value, halfyearDDL= document.getElementById( 'halfyear_id' ), halfyear, i = halfyearDDL.options.length - 1;

quarter = 0;
halfyear = 0;

for ( ; i > -1 ; i-- ) {
if ( quarterDDL.options[i].value == quarter ) {
quarterDDL.options[i].selected = true;
break;
}
}

for ( ; i > -1 ; i-- ) {
if ( halfyearDDL.options[i].value == halfyear ) {
halfyearDDL.options[i].selected = true;
break;
}
}

}

month_for_update.onchange = updateQuarterHalfyear;

/**/
var quarter_for_update = document.getElementById( 'quarter_id' );
function updateMonthHalfyear ( e ) {

var month = this.options[ this.selectedIndex ].value, monthDDL= document.getElementById( 'month_id' ), month, i = monthDDL.options.length - 1;

var halfyear = this.options[ this.selectedIndex ].value, halfyearDDL= document.getElementById( 'halfyear_id' ), halfyear, i = halfyearDDL.options.length - 1;

month = 0;
halfyear = 0;

for ( ; i > -1 ; i-- ) {
if ( monthDDL.options[i].value == month ) {
monthDDL.options[i].selected = true;
break;
}
}

for ( ; i > -1 ; i-- ) {
if ( halfyearDDL.options[i].value == halfyear ) {
halfyearDDL.options[i].selected = true;
break;
}
}

}

quarter_for_update.onchange = updateMonthHalfyear;


/**/
var halfyear_for_update = document.getElementById( 'halfyear_id' );
function updateMonthQuarter ( e ) {

var month = this.options[ this.selectedIndex ].value, monthDDL= document.getElementById( 'month_id' ), month, i = monthDDL.options.length - 1;

var quarter = this.options[ this.selectedIndex ].value, quarterDDL= document.getElementById( 'quarter_id' ), quarter, i = quarterDDL.options.length - 1;

month = 0;
quarter = 0;

for ( ; i > -1 ; i-- ) {
if ( monthDDL.options[i].value == month ) {
monthDDL.options[i].selected = true;
break;
}
}

for ( ; i > -1 ; i-- ) {
if ( quarterDDL.options[i].value == quarter ) {
quarterDDL.options[i].selected = true;
break;
}
}

}

halfyear_for_update.onchange = updateMonthQuarter;    

Please advice how to shorten javascript. 请建议如何缩短javascript。 Possibly some other part of code can be improved. 可能可以对代码的其他部分进行改进。

Clarification. 澄清。 Default value is the first value ( [0] ) in $options_month , $options_quarter , $options_halfyear . 默认值为$options_month$options_quarter$options_halfyear的第一个值( [0] )。 When page first loads can see Select month , Select quarter , Select half-year . 页面首次加载时可以看到“ Select month ,“ Select quarter ,“ Select half-year So page loads. 因此页面加载。 User select for example February from the months drop down menu. 用户从月份下拉菜单中选择例如February月。 Then user decides that instead of month need to select quarter. 然后,用户决定代替月份需要选择季度。 User select First from quarters drop down menu. 用户从四分之一下拉菜单中选择“ First Value in months drop down menu automatically changes to Select month . 月份值下拉菜单会自动更改为Select month

here is my solution. 这是我的解决方案。 Much simpler. 简单得多。 However, I have change to html layout as well. 但是,我也更改了html布局。

HTML update: (have onchange in select tag) HTML更新:(在select标签中具有onchange)

<select id="month_id" name="monthid" onchange="update_other_dd ( 'month_id' )">
...
<select id="quarter_id" name="quarterid" onchange="update_other_dd ( 'quarter_id' )">
...
<select id="halfyear_id" name="halfyearid" onchange="update_other_dd ( 'halfyear_id' )">
...

Javascript update: (reduced to 9 lines) Javascript更新:(减少到9行)

    var dd_array = ['month_id', 'quarter_id', 'halfyear_id'];
    function update_other_dd ( dd_id ) {
    for(i=0;i<dd_array.length;i++){
    if(dd_array[i] != dd_id){
        var array_to_reset = document.getElementById( dd_array[i] );
        array_to_reset.options[0].selected = 1;
    }
    }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM