将 jQuery 日期选择器应用于多个实例

IT技术 javascript jquery jquery-ui
2021-02-16 07:14:13

我有一个 jQuery 日期选择器控件,可以在一次实例中正常工作,但我不确定如何让它为多个实例工作。

<script type="text/javascript">
    $(function() {
        $('#my_date').datepicker();
    });
</script>

<% Using Html.BeginForm()%>
<% For Each item In Model.MyRecords%>
<%=Html.TextBox("my_date")%> <br/>
<% Next%>
<% End Using%>

如果没有 For Each 循环,它工作正常,但如果“MyRecords”集合中有多个项目,则只有第一个文本框获得日期选择器(这是有道理的,因为它与 ID 相关联)。我尝试为文本框分配一个类并指定:

$('.my_class').datepicker();

但是虽然到处都显示了日期选择器,但它们都会更新第一个文本框。

使这项工作的正确方法是什么?

6个回答

html:

<input type="text" class="datepick" id="date_1" />
<input type="text" class="datepick" id="date_2" />
<input type="text" class="datepick" id="date_3" />

脚本:

$('.datepick').each(function(){
    $(this).datepicker();
});

(伪编码了一点以使其更简单)

我在输入上没有 ID,但有相同的类。在 Chrome 和 FF 上工作正常,但不适用于 IE。要修复,我只获取输入 ID
2021-04-20 07:14:13
我已经使用 CSS 类名和onSelect事件处理程序将日期选择器附加到一些 HTML 文本框我需要知道当前onSelect发生的选择器类名.. 元素应用了 2 个其他类,而不是我用来附加日期选择器的类
2021-04-24 07:14:13
$(".datepick").datepicker();一旦你在输入字段上有不同的 id 就不能工作了吗?
2021-04-27 07:14:13
呃,不要让文本框有相同的 ID。有时,您必须暂时离开一个问题,才能让明显的答案浮出水面。
2021-05-10 07:14:13
看起来我的问题的核心是文本框都具有相同的 ID,所以每个日期选择器都在更新第一个文本框。您的示例不受此影响,因此它有效。如何在循环中使 ID 不同?
2021-05-15 07:14:13

我只是遇到了同样的问题。

使用日期选择的正确方法是,$('.my_class').datepicker();但您需要确保不要将相同的 ID 分配给多个日期选择器。

显而易见的答案是生成不同的 id,每个文本框都有一个单独的 id,比如

[int i=0]
<% Using Html.BeginForm()%>
<% For Each item In Model.MyRecords%>
[i++]
<%=Html.TextBox("my_date[i]")%> <br/>
<% Next%>
<% End Using%>

我不知道 ASP.net,所以我只是在方括号内添加了一些通用的类似 C 的语法代码。将其转换为实际的 ASP.net 代码应该不成问题。

然后,您必须找到一种方法来生成尽可能多的

$('#my_date[i]').datepicker();

作为您的Model.MyRecords. 同样,方括号内是您的计数器,因此您的 jQuery 函数将类似于:

<script type="text/javascript">
    $(function() {
        $('#my_date1').datepicker();
        $('#my_date2').datepicker();
        $('#my_date3').datepicker();
        ...
    });
</script>
<html>
<head>
 <!-- jQuery JS Includes -->
 <script type="text/javascript" src="jquery/jquery-1.3.2.js"></script>
 <script type="text/javascript" src="jquery/ui/ui.core.js"></script>
 <script type="text/javascript" src="jquery/ui/ui.datepicker.js"></script>

 <!-- jQuery CSS Includes -->
 <link type="text/css" href="jquery/themes/base/ui.core.css" rel="stylesheet" />
 <link type="text/css" href="jquery/themes/base/ui.datepicker.css" rel="stylesheet" />
 <link type="text/css" href="jquery/themes/base/ui.theme.css" rel="stylesheet" />

 <!-- Setup Datepicker -->
 <script type="text/javascript"><!--
  $(function() {
   $('input').filter('.datepicker').datepicker({
    changeMonth: true,
    changeYear: true,
    showOn: 'button',
    buttonImage: 'jquery/images/calendar.gif',
    buttonImageOnly: true
   });
  });
 --></script>
</head>
<body>

 <!-- Each input field needs a unique id, but all need to be datepicker -->
 <p>Date 1: <input id="one" class="datepicker" type="text" readonly="true"></p>
 <p>Date 2: <input id="two" class="datepicker" type="text" readonly="true"></p>
 <p>Date 3: <input id="three" class="datepicker" type="text" readonly="true"></p>

</body>
</html>

有一个简单的解决方案。

<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>      
        <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"> </script> 
        <script type="text/javascript" src="../js/jquery.min.js"></script>
        <script type="text/javascript" src="../js/flexcroll.js"></script>
        <script type="text/javascript" src="../js/jquery-ui-1.8.18.custom.min.js"></script>
        <script type="text/javascript" src="../js/JScript.js"></script>
        <title>calendar</title>    
        <script type="text/javascript"> 
            $(function(){$('.dateTxt').datepicker(); }); 
        </script> 
    </head>
    <body>
        <p>Date 1: <input id="one" class="dateTxt" type="text" ></p>
        <p>Date 2: <input id="two" class="dateTxt" type="text" ></p>
        <p>Date 3: <input id="three" class="dateTxt" type="text" ></p>
    </body>
</html>