在日期选择器处于活动状态时将 class 添加到输入和标签?

add class to input and label when datepicker is active?

我正在尝试创建一个带有样式输入的表单(有点受 shopify 的结帐页面的启发),当用户开始输入时,标签将显示在该表单中。在我尝试添加 jQuery UI 的日期选择器小部件之前,一切似乎都运行良好。

输入前我的表单如下所示:

这就是我输入内容时的样子:

如您所见,标签 "birthday" 应该在用户从日期选择器小部件中选择生日后显示。但是除非用户自己输入日期,否则什么也不会出现……有什么建议我可以用代码做什么吗?

这是我的 jQuery:

// input
$('input[type="text"], input[type="password"]').on('keyup blur', function(){
    tmpval = $(this).val();
    if(tmpval == '') {
        $(this).removeClass('active')
        .siblings('label').removeClass('active');
    } else {
        $(this).addClass('active')
        .siblings('label').addClass('active');
    }
});
// date picker
$('.datepicker').datepicker({
    changeMonth: true,
    changeYear: true,
    yearRange: "-100:+0"
});

这是我的一部分 html:

<li>
    <label class="label" for="first_name">First name</label>
    <input type="text" id="first_name" placeholder="First name" />
</li>
<li>
    <label class="label" for="last_name">Last name</label>
    <input type="text" id="last_name" placeholder="Last name" />
</li>
<li>
    <label class="label" for="birthday">Birthday</label>
    <input type="text" id="birthday" class="datepicker" placeholder="Birthday" />
</li>

如有任何帮助,我们将不胜感激!谢谢!

(由于英语不是我的第一语言,如果我的任何文字没有意义,我也深表歉意。)

嗯,你需要 运行 代码,当用户 select 约会时显示标签(因为事件 keyupblur 都没有被触发) . 您可以使用 onSelect 回调来执行此操作。

类似于:

// input
$('input[type="text"], input[type="password"]').on('keyup blur', function() {
  handleLabel($(this));
});
// date picker
$('.datepicker').datepicker({
  changeMonth: true,
  changeYear: true,
  yearRange: "-100:+0",
  onSelect: function() {
    // Keep in mind that maybe the $(this) now reference to something else so you need to serach for the relvent Node
    handleLabel($(this));
  }
});

function handleLabel(elm) {
  tmpval = elm.val();
  if (tmpval == '') {
    elm.removeClass('active')
      .siblings('label').removeClass('active');
  } else {
    elm.addClass('active')
      .siblings('label').addClass('active');
  }
}

如果您要创建一个工作片段(或 fiddle 或其他),我可以告诉您如何修复它。

您需要在 jquery 日期选择器的 select 事件上设置 class。这需要帮助你。

// input
 function setclass()
{
  tmpval = $(this).val();
  if(tmpval == '')
  {
    $(this).removeClass('active')
    .siblings('label').removeClass('active');
  }
  else 
  {
    $(this).addClass('active')
    .siblings('label').addClass('active');
  }
}
$('input[type="text"], input[type="password"]').on('keyup blur', function()
{
  setclass();
});

$('.datepicker').datepicker({
changeMonth: true,
changeYear: true,
yearRange: "-100:+0",
onSelect: function(dateText) 
  {
  setclass()
  }
});