无法在javascript中获取正确的日期值

无法在javascript中获取正确的日期值,javascript,wordpress,forms,date,Javascript,Wordpress,Forms,Date,[我已在下面更新了此问题,请参阅关于无限警报循环的新问题] 我的表单中有一个出生日期字段,还有一个输入字段和日期选择器 输入正确的值后,更改功能被激活,并运行如下逻辑,对出生日期进行一些处理以获得年龄 但是,当我使用alert()提示输入出生日期的值时,我看不到输入的值,而是显示一个空字符串 我尝试了document.getElementById(“9_element14”).value,但没有成功,显示未定义。所以我切换到jQuery,现在它显示空字符串 这是一个Wordpress表单生成器表

[我已在下面更新了此问题,请参阅关于无限警报循环的新问题]

我的表单中有一个出生日期字段,还有一个输入字段和日期选择器

输入正确的值后,更改功能被激活,并运行如下逻辑,对出生日期进行一些处理以获得年龄

但是,当我使用
alert()
提示输入出生日期的值时,我看不到输入的值,而是显示一个空字符串

我尝试了
document.getElementById(“9_element14”).value
,但没有成功,显示未定义。所以我切换到
jQuery
,现在它显示空字符串

这是一个Wordpress表单生成器表单,因此修改HTML有限制,但我可以更改JavaScript

任何建议都将不胜感激

该表格的链接如下:

我的代码如下:

HTML


出生日期:
*
JAVASCRIPT

 // before form is load
function before_load()
{   

}   


$(document).ready(function() {
    $('[id$=11]').hide();
    $('[id$=49]').hide();
});

// before form submit
function before_submit()
{

}   
// before form reset
function before_reset()
{   
}

function on_choose_course() {
 var course = document.getElementById("1_element14");
var selected = course.options[course.options.selectedIndex].value;
if (selected=="Canoe Polo Lvl 1" || selected=="Kayaking Orientation" || selected=="1 Star Award"){
       $('[id$=49]').hide();
}
else{
       $('[id$=49]').show();
 }


}

$(function(){
$('[id$=9_element14]').change(function(e) {
       on_date_select();
    });
});

function ValidateDate(dtValue)
{
var dtRegex = new RegExp(/\b\d{1,2}[\-]\d{1,2}[\-]\d{4}\b/);
return dtRegex.test(dtValue);
}


function on_date_select() {
//calculate age
var current_year = new Date().getFullYear();

if ($('[id$=9_element14]').length) {
var dob = $('[id$=9_element14]').val();

alert($('[id$=9_element14]').val());

if (ValidateDate(dob)){
var age = current_year - substr(dob, 6, 10);
alert(substr(dob, 6, 10));
alert(age);

if (age<21){
//show declaration is 21 and above
   $('[id$=11]').show();
}

if (age>=21){
//show declaration is 21 and above
   $('[id$=11]').hide();
}
}//end validatedate
}//end check empty
}
//在加载表单之前
加载之前的函数()
{   
}   
$(文档).ready(函数(){
$('[id$=11]')。隐藏();
$('[id$=49]')。隐藏();
});
//提交表格前
_submit()之前的函数
{
}   
//表格重置前
_reset()之前的函数
{   
}
_choose_course()上的函数{
var course=document.getElementById(“1_element14”);
var selected=course.options[course.options.selectedIndex].value;
如果(选择==“独木舟马球1级”| |选择==“皮划艇方向”| |选择==“1星级奖”){
$('[id$=49]')。隐藏();
}
否则{
$('[id$=49]')。show();
}
}
$(函数(){
$('[id$=9_element14]')。更改(函数(e){
在日期选择();
});
});
函数ValidateDate(dtValue)
{
var dtRegex=newregexp(/\b\d{1,2}[\-]\d{1,2}[\-]\d{4}\b/);
返回dtRegex.test(dtValue);
}
函数的日期选择(){
//计算年龄
var current_year=新日期().getFullYear();
if($('[id$=9_element14]')。长度){
var dob=$('[id$=9_element14]')。val();
警报($('[id$=9_element14]')。val();
if(验证日期(dob)){
var年龄=当前年-次级年(出生日期6,10);
警报(substr(dob,6,10));
警觉(年龄);
如果(年龄=21岁){
//显示声明为21及以上
$('[id$=11]')。隐藏();
}
}//结束验证
}//结束检查为空
}
==================================================================

谢谢你们的帮助!使用JSFIDLE并在这里或那里进行更改,我得出的结论是,我使用dob子字符串的方式不起作用,导致整个函数失败

现在我已经改正了。现在唯一的问题是,当出生日期无效时,我会收到无限的警报循环

新代码:

// before form is load
function before_load()
{   

}   


$(document).ready(function() {
    $('[id$=11]').hide();
    $('[id$=49]').hide();
});

// before form submit
function before_submit()
{
  checkDetails($('[id$=15_element140]'),$('[id$=21_element14]'));
}   
// before form reset
function before_reset()
{   
}

function on_choose_course() {
 var course = document.getElementById("1_element14");
var selected = course.options[course.options.selectedIndex].value;
if (selected=="Canoe Polo Lvl 1" || selected=="Kayaking Orientation" || selected=="1 Star Award"){
       $('[id$=49]').hide();
}
else{
       $('[id$=49]').show();
 }

}

function checkDetails(e,f){
 if (e.checked && (f.trim()).length==0){
   alert("Please give details about the medical condition.");
   e.focus();
 }
}

$(function(){
$('[id$=9_element14]').change(function(e) {
       on_date_select();
    });
});

function ValidateDate(dtValue)
{
var dtRegex = new RegExp(/\b\d{1,2}[\-]\d{1,2}[\-]\d{4}\b/);
return dtRegex.test(dtValue);
}


function on_date_select() {
//calculate age
var current_year = new Date().getFullYear();

if ($('[id$=9_element14]').length) {
var dob = $('[id$=9_element14]').val();

if (ValidateDate(dob)){
var age = current_year - dob.substring(6, 10);

if (age<21){
//show declaration is 21 and above
   $('[id$=11]').show();
}

if (age>=21){
//show declaration is 21 and above
   $('[id$=11]').hide();
}
}else{
$('[id$=9_element14]').focus(
function() {
alert("Date of Birth is invalid");
}
);
}//end validatedate
}//end check empty
}
//在加载表单之前
加载之前的函数()
{   
}   
$(文档).ready(函数(){
$('[id$=11]')。隐藏();
$('[id$=49]')。隐藏();
});
//提交表格前
_submit()之前的函数
{
检查详细信息($('[id$=15_元素140]'),$('[id$=21_元素14]');
}   
//表格重置前
_reset()之前的函数
{   
}
_choose_course()上的函数{
var course=document.getElementById(“1_element14”);
var selected=course.options[course.options.selectedIndex].value;
如果(选择==“独木舟马球1级”| |选择==“皮划艇方向”| |选择==“1星级奖”){
$('[id$=49]')。隐藏();
}
否则{
$('[id$=49]')。show();
}
}
功能检查详细信息(e、f){
如果(e.checked&(f.trim()).length==0){
警告(“请提供有关医疗状况的详细信息”);
e、 焦点();
}
}
$(函数(){
$('[id$=9_element14]')。更改(函数(e){
在日期选择();
});
});
函数ValidateDate(dtValue)
{
var dtRegex=newregexp(/\b\d{1,2}[\-]\d{1,2}[\-]\d{4}\b/);
返回dtRegex.test(dtValue);
}
函数的日期选择(){
//计算年龄
var current_year=新日期().getFullYear();
if($('[id$=9_element14]')。长度){
var dob=$('[id$=9_element14]')。val();
if(验证日期(dob)){
var年龄=当前年份-出生日期子串(6,10);
如果(年龄=21岁){
//显示声明为21及以上
$('[id$=11]')。隐藏();
}
}否则{
$('[id$=9_element14]')。焦点(
函数(){
警告(“出生日期无效”);
}
);
}//结束验证
}//结束检查为空
}

ID和
名称
标记必须以字母
([a-Za-z])
开头,并且后面可以是任意数量的字母、数字
([0-9])
、连字符
(“-”
、下划线
(“"”)
、冒号
(“:”
)和句点

根据规则更改元素标识符,一切都将正常工作


更多信息和。

我复制了你的代码并放在这里,它工作正常,还有另一个代码出错谢谢你Se0ng11。我也没有看到我的代码有什么问题,可能是日期选择器引起了一些冲突和问题。问题是,在DOB年份和年龄之后,应该会有另一个警报,但是没有更多的警报。JSFIDLE没有包含您在web中包含的所有脚本,所以您可以更新JSFIDLE并再次发布到这里,看看我们是否可以找到并压缩您脚本中的错误,另一个警报没有弹出,因为未定义
change\u value('9\u element14')
。\r Se0ng11,我已使用调用的其他函数进行了更新,您能帮我看一下吗?我不知道你在JSFIDLE的什么地方看到了日志,所以我无法调试。你可以尝试在实际站点上测试“出生日期”字段:我试图做一些更改,但在上次尝试时,在警报出现并单击“确定”后,另一个警报出现,整个浏览器挂起。因此,似乎有人在该领域再次调用自己,出现了无限循环。谢谢你。但是,我没有权利更改ID和名称标记,因为它们是由我正在使用的插件(不是我写的)分配的。然而,其他javascript代码正在工作,我只是不明白为什么这一个是否定的
// before form is load
function before_load()
{   

}   


$(document).ready(function() {
    $('[id$=11]').hide();
    $('[id$=49]').hide();
});

// before form submit
function before_submit()
{
  checkDetails($('[id$=15_element140]'),$('[id$=21_element14]'));
}   
// before form reset
function before_reset()
{   
}

function on_choose_course() {
 var course = document.getElementById("1_element14");
var selected = course.options[course.options.selectedIndex].value;
if (selected=="Canoe Polo Lvl 1" || selected=="Kayaking Orientation" || selected=="1 Star Award"){
       $('[id$=49]').hide();
}
else{
       $('[id$=49]').show();
 }

}

function checkDetails(e,f){
 if (e.checked && (f.trim()).length==0){
   alert("Please give details about the medical condition.");
   e.focus();
 }
}

$(function(){
$('[id$=9_element14]').change(function(e) {
       on_date_select();
    });
});

function ValidateDate(dtValue)
{
var dtRegex = new RegExp(/\b\d{1,2}[\-]\d{1,2}[\-]\d{4}\b/);
return dtRegex.test(dtValue);
}


function on_date_select() {
//calculate age
var current_year = new Date().getFullYear();

if ($('[id$=9_element14]').length) {
var dob = $('[id$=9_element14]').val();

if (ValidateDate(dob)){
var age = current_year - dob.substring(6, 10);

if (age<21){
//show declaration is 21 and above
   $('[id$=11]').show();
}

if (age>=21){
//show declaration is 21 and above
   $('[id$=11]').hide();
}
}else{
$('[id$=9_element14]').focus(
function() {
alert("Date of Birth is invalid");
}
);
}//end validatedate
}//end check empty
}