【问题标题】:Javascript duplicate form inputJavascript重复表单输入
【发布时间】:2012-08-12 04:57:09
【问题描述】:

我有一个表单,我需要两个字段相同。在设置第一个之后,我正在尝试使用 javascript 使第二个与第一个相同。

这是javascript(在我的标签上方)

 <script type="text/javascript" charset="utf-8">    
      function updateDate(){        
      startDate = document.getElementById("startdate").value;      
      document.getElementById("enddate").value = startDate;
 } </script>

HTML如下:

 <span class="em-events-search-dates em-date-range">
 <input type="text" id="startdate" class="em-date-input-loc em-date-start" onchange="updateDate();" />
 <input type="hidden" class="em-date-input" name="scope[0]" value="<?php if( !empty($_REQUEST['scope'][0]) ) echo $_REQUEST['scope'][0]; ?>" />
 <input type="text" id="enddate" class="em-date-input-loc em-date-end" />
 <input type="hidden" class="em-date-input" name="scope[1]" value="<?php if( !empty($_REQUEST['scope'][1]) ) echo $_REQUEST['scope'][1]; ?>" />
 </span>

我遇到的问题是,当您单击表单字段时,它会打开一个日期选择器。我很确定它使用了这个确切的插件http://jqueryui.com/demos/datepicker/

不幸的是,这意味着您在选择日期后从未真正单击表单域,也从未键入任何内容。

我在第二个字段上尝试了 onmouseout(带有 em-date-input 类的隐藏字段) 我在第一个 id 为 startdate 的元素上尝试了 onchange

只有当您返回并单击选定日期的可见字段时,有一些有效。问题是,用户永远不会这样做。

我什至试着把 onsubmit="updateDate();"在提交按钮上,希望当您单击它时,它会在提交表单之前更改第二个日期.. 不走运。有什么建议?

编辑:添加警报以查看哪些有效,哪些无效

 <input type="text" onchange="alert('first');" id="startdate" class="em-date-input-loc em-date-start" />
 <input type="hidden" onchange="alert('second');" class="em-date-input" name="scope[0]" value="<?php if( !empty($_REQUEST['scope'][0]) ) echo $_REQUEST['scope'][0]; ?>" />
 <input type="text" onchange="alert('third');" id="enddate" class="em-date-input-loc em-date-end" />
 <input type="hidden" onchange="alert('fourth');" class="em-date-input" name="scope[1]" value="<?php if( !empty($_REQUEST['scope'][1]) ) echo $_REQUEST['scope'][1]; ?>" />

当我更改第二个框 (id="enddate") 上的日期时,它会触发第三个警报。即使我多次更改第一个框中的日期或通过键入,也不会触发其他警报。

【问题讨论】:

  • 旁注,这里不需要charset="utf-8"。另外,您“非常确定”它使用 jQuery UI 日期选择器?你不知道吗?如果是这样,您将拥有所有的 jQuery。
  • 您想要两个字段中的相同值还是只想要两个字段??
  • 是的,我希望两个字段中的值相同,以便在提交表单时只搜索一天,而不是几天的范围。如果第二个日期为空,则搜索第一个日期之后的任何内容
  • 我不知道。它是用一个名为 Events Manager 的 wordpress 插件生成的,我仍然没有找到它在他们的文件中生成日期选择器框的位置。

标签: javascript forms datepicker duplicates


【解决方案1】:

您需要将onchange 事件连接到textbox,然后在它触发后复制您的数据。一旦日期选择器更新了值,它就会触发。

【讨论】:

  • 就是这样,当我添加 onchange="updateDate();"到 id="startdate" 的文本框并更改日期,它根本不会更新第二个框
  • 在里面放一个警报,看看它是否会触发。
  • 甚至不会触发..第二个日期框会触发,但第一个不会触发。
【解决方案2】:

在提交事件之前使用表单:

onsubmit="return YOUR_FUNCTION_HERE()"

只需将其添加到您的提交按钮即可。

然后在该函数中设置值:

var YOUR_FUNCTION_HERE = function(){
    //set your hidden inputs
}

【讨论】:

  • onsubmit 工作,当我把它放在
    标签上。它填充第二个字段,但在提交表单时不使用该信息。这是因为它在处理字段后添加它吗?
【解决方案3】:

如果我理解你的问题,那么你可能想要这个(对你的问题有点困惑)

$(function(){
    $('#startdate, #enddate').datepicker();
    $('#startdate').on('change', function(e){
        $('#enddate').val($('#startdate').val());
    });
});​

DemoThis One.

【讨论】:

  • 在小提琴中完美工作..对我不起作用。 altitudevip.com/events这是页面上的第二个表单
  • 控制台出现错误Uncaught SyntaxError: Unexpected token ? 尝试修复。
  • Datepicker 钩子被事件管理器插件更改为 em-date-range(),一旦我改变它就可以工作了。谢谢!
  • 只是好奇,为什么不使用 onchange="updateDate();"表单输入改变时调用函数的方法?
  • 这不是正确的方式,因为你使用的是jQuery,你应该以jQuery的方式使用它。
猜你喜欢
  • 2013-03-23
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 2016-01-25
  • 2015-02-13
相关资源
最近更新 更多