2012-10-14 61 views
1

我想要得到一个表格来验证http://validator.w3.org/,我有一个窗体,有Javascript创建的选项,这是为了简化用户的日期选择。页面验证:内嵌Javascript

的JavaScript创建内联:

  • 当前的年份和月份(到达日期)
  • 今后某一年份和月份(出发日期)

我已经想好了的JavaScript转换成的PHP,但有什么办法来维护JavaScript,但同时能够通过验证测试?

的JavaScript代码:

<div class="dateBE">Fecha de llegada</div> 
<select class="fieldTRA" id="b_checkin_day" name="checkin_monthday" onchange="checkDateOrder('frm', 'b_checkin_day', 'b_checkin_month', 'b_checkout_day', 'b_checkout_month') ; tickCheckBox('b_availcheck');"> 
<option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option> 

</select> 

<select class="fieldTRA" id="b_checkin_month" name="checkin_year_month" onchange="checkDateOrder('frm', 'b_checkin_day', 'b_checkin_month', 'b_checkout_day', 'b_checkout_month') ; tickCheckBox('b_availcheck');"> 

**<script type="text/javascript"> 
/* <![CDATA[ */ 
      var monthArray=new Array("enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"); 
var today = new Date(); 
     var month= today.getMonth(); 
     var year = today.getFullYear()%100; 
     var fullYear=today.getFullYear(); 
     year=new String(year); 
     year=addzero(year); 
     var countMonth=month; 
     for(var i=0;i<12;i++,countMonth++){ 
    if(countMonth%12==0 && i>0){ 
    countMonth=0; 
    year++; 
    year=new String(year); 
    year=addzero(year); 
    fullYear++; 
    } 
    document.writeln("<option value=\""+fullYear+"-"+(countMonth+1)+"\">"+monthArray[countMonth]+" '"+year); 
    } 
/* ]]> */ 
</script> 
    </select> 
</div>** 


<div id="homeout"> 
<div class="dateBE">Fecha de salida</div> 


<select class="fieldTRA" id="b_checkout_day" name="checkout_monthday" onchange="tickCheckBox('b_availcheck');"> 
<option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option> 

</select> 
<select class="fieldTRA" id="b_checkout_month" name="checkout_year_month" onchange="tickCheckBox('b_availcheck');"> 
<script type="text/javascript"> 
/* <![CDATA[ */ 
     var monthArray=new Array("enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"); 
     var today = new Date(); 
     var month= today.getMonth(); 
     var year = today.getFullYear()%100; 
     var fullYear=today.getFullYear(); 
     year=new String(year); 
     year=addzero(year); 
     var countMonth=month; 
     for(var i=0;i<12;i++,countMonth++){ 
if(countMonth%12==0 && i>0){ 
    countMonth=0; 
    year++; 
    year=new String(year); 
    year=addzero(year); 
    fullYear++; 
} 
document.writeln("<option value=\""+fullYear+"-"+(countMonth+1)+"\">"+monthArray[countMonth]+" '"+year); 
} 

/* ]]> */ 
</script> 
    </select> 
</div> 

      </div> 

的形式可以在这里看到:http://www.visitar.com

+2

是的,你应该将它转换为PHP - 没有什么需要发生在客户端 – Bergi

+0

我同意@Bergi这应该用PHP创建,但是,如果你想使用javascript,请不要使用'document.writeline ',这只是不好的形式。相反,您可以引用'select'标签并通过原生JavaScript或类似jQuery的库插入您自己的'option'节点。这样你就不需要在select中有脚本标签。 – Matthew

+0

感谢Bergi,不幸的是我没有足够强的PHP能力来完成它(考虑到闰年等)。我寻求帮助,在这里,并得到downvoted大声笑!有没有一个很好的资源可以帮助我转换它? – Alex

回答

0

我建议所有的表单/ HTML结构逻辑转移到PHP。你在这里做的是一些很混淆的混合,因为你在javascript中添加了表单的值,并在服务器上的PHP代码中处理这些值。

如果你正在寻找一种方法来做到这一点与JavaScript看看jQuery,可以帮助你写很多不引人注目的JS代码。例如:

$(function() { 
    var opt = ""; 

    // Date calculations left out 
    for(var i=0;i<12;i++,countMonth++) { 
     opt += "<option value=\""+fullYear+"-"+(countMonth+1)+"\">"+monthArray[countMonth]+" '"+year; 
    }); 

    $('#b_checkout_month').append(opt); 
} 

该脚本可以被包含在头部或刚刚闭幕body标签,因为它不依赖于直接的文档访问,但通过jQuery选择$(“#b_checkout_month”)引用选择选项之前。

+0

是的,它是一个棘手的问题,因为您需要提交表单以获取出发日期......这使得将所有表单放入php中并不合适。我需要在这里混合使用! – Alex