javascript - 可重用的 jQuery 日期操纵器函数

标签 javascript jquery html

我问了这个question之前。此后我取得了一些进展,但遇到了问题。我正在尝试创建一个可重用的函数,该函数可以操作用户输入的日期并将不同格式的日期返回到隐藏字段中。我的实现对于第一个日期字段可以正常工作,但它也会将相同的值返回到具有相同类名的其他隐藏字段中?

$.fn.convertDate = function() {

    var dateIn      = $('input.datedisplay').val().split('/');
    var dateOut     = dateIn[2] + '-' + dateIn[1] + '-' + dateIn[0]

    if (dateIn != '') {
        $(this).closest('div.row').find('input.dateselect').val(dateOut);
    }
};


$(document).on('change', function() {
   $('input.datedisplay').convertDate();
});


<div class="row collapse">
  <label>Date label</label>
  <div class="small-3 large-2 columns">
    <span class="prefix"><%= icon('fa fa-calendar-o') %></span>
  </div>
  <div class="small-9 large-10 columns">
    <input class="datedisplay fdatepickernew" type="text" value="">
    <input class="dateselect" type="hidden" value="">
  </div>
</div>

<div class="row collapse">
  <label>Date label</label>
  <div class="small-3 large-2 columns">
    <span class="prefix"><%= icon('fa fa-calendar-o') %></span>
  </div>
  <div class="small-9 large-10 columns">
    <input class="datedisplay fdatepickernew" type="text" value="">
    <input class="dateselect" type="hidden" value="">
  </div>
</div>

最佳答案

如果您的插件是由 input.datedisplay 本身初始化的,则需要使用 this

var dateIn  = $(this).val().split('/');

否则,它将给出当前目标元素的正确日期。

此外,您应该检查数组的长度,例如,

if (dateIn.length) {// as is an array not a string

$.fn.convertDate = function () {
    var dateIn = $(this).val().split('/');
    var dateOut = dateIn[2] + '-' + dateIn[1] + '-' + dateIn[0];
    if (dateIn != '') {
        $(this).closest('div.row').find('input.dateselect').val(dateOut);
    }
};
$(document).ready(function () {
    $('input.datedisplay').on('change', function () {
        $(this).convertDate()
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row collapse">
    <label>Date label</label>
    <div class="small-9 large-10 columns">
        <input class="datedisplay fdatepickernew" type="text" value=""/>
            <input class="dateselect" type="text" value=""/>
    </div>
</div>
<div class="row collapse">
    <label>Date label</label>
    <div class="small-9 large-10 columns">
        <input class="datedisplay fdatepickernew" type="text" value=""/>
        <input class="dateselect" type="text" value=""/>
    </div>
</div>

关于javascript - 可重用的 jQuery 日期操纵器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870770/

相关文章:

javascript - Mongoose 无法从 MongoDB 数据库获取数据

javascript - 具有 'slidedown' 功能的横幅广告在我的 jsfiddle 中有效,但在真实环境中无效

javascript - JS用按钮改变图像

javascript - JQuery 最佳实践

php - 如何使用 JQuery 的 "load"函数来获取变量中所需的数据?

javascript - 分配悬停然后模糊到具有组的对象

javascript - ng-focus 不适用于 <button> 标签

javascript - rails : Turbolinks back to top of page

谷歌浏览器扩展的 javascript 屏幕截图

javascript - jquery 从子元素迭代内部子元素