jQuery UI 由于输入字段上有额外的 类,日期选择器未初始化
jQuery UI Datepicker not initializing due to extra classes on input fields
我对 jQuery 并不陌生,而且我对 Bootstrap Datepicker 有很多经验并且从未遇到过问题。然而,这个项目有很多 jQuery UI Datepicker 的遗留配置,这些配置或多或少让我无法使用它。但是,无论出于何种原因,我似乎无法对其进行初始化。我正在使用来自 CDN 的 jQuery 和 jQuery UI,我还没有尝试做任何花哨的事情。
以下是所有内容在最基本状态下的设置方式。
CDN:
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
初始化:
<script type="text/javascript">
$("#checkin").datepicker();
</script>
HTML:
<div class="travel-dates small">
<div class="date">
<label for="checkin">Check in</label>
<div class="input-group form-group">
<input name='checkin' id="checkin" class="form-control input-sm" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
<div class="date">
<label for="checkout">Check out</label>
<div class="input-group form-group">
<input name="checkout" id="checkout" class="form-control input-sm" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
</div>
我也尝试使用 $("#checkin").datepicker("show") 在单击时调用日期选择器,当我这样做时,我收到错误 "t is undefined,",其中引用了日期选择器它的痕迹。
我一定是遗漏了什么,或者做错了什么,但我终生无法让它发挥作用。我已经浏览了关于该主题的所有其他 SO 答案,但没有找到任何有用的信息。老实说,我决定用其他东西重做他们为 jQuery UI Datepicker 所做的所有很酷的事情,而不是尝试让它在如此少的情况下继续工作错误的方式。任何帮助或建议将不胜感激。
更新:
我在上面发布的内容在我将其复制回来时最终起作用了。我正在处理的站点是一个 angular 站点,已移植到 PHP,但我的输入中仍有一些 angular 类。这些 类 没有在我们当前的 CSS 文件中定义,我们只是没有时间删除它们。出于某种原因,删除那些 类 就可以了。澄清一下,日历没有被隐藏或显示:none,它未能正确初始化。现在一切正常,但我很好奇是否有人能解开为什么额外的未定义 类 导致它失败的谜团。
原文HTML:
<div class="travel-dates small ng-isolate-scope">
<div class="date">
<label for="checkin" class="ng-scope">Check in</label>
<div class="input-group form-group">
<input name='checkin' id="checkin" class="form-control input-sm ng-pristine ng-invalid ng-invalid-required hasDatepicker" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
<div class="date">
<label for="checkout" class="ng-scope">Check out</label>
<div class="input-group form-group">
<input name="checkout" id="checkout" class="form-control input-sm ng-pristine ng-invalid ng-invalid-required hasDatepicker" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm" disabled="disabled"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
</div>
无法重现您所描述的问题。我怀疑某些东西导致加载 jQuery UI.
出现问题
$(function() {
$("#checkin").datepicker();
});
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<div class="travel-dates small">
<div class="date">
<label for="checkin">Check in</label>
<div class="input-group form-group">
<input name='checkin' id="checkin" class="form-control input-sm" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
<div class="date">
<label for="checkout">Check out</label>
<div class="input-group form-group">
<input name="checkout" id="checkout" class="form-control input-sm" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
</div>
我对 jQuery 并不陌生,而且我对 Bootstrap Datepicker 有很多经验并且从未遇到过问题。然而,这个项目有很多 jQuery UI Datepicker 的遗留配置,这些配置或多或少让我无法使用它。但是,无论出于何种原因,我似乎无法对其进行初始化。我正在使用来自 CDN 的 jQuery 和 jQuery UI,我还没有尝试做任何花哨的事情。
以下是所有内容在最基本状态下的设置方式。
CDN:
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
初始化:
<script type="text/javascript">
$("#checkin").datepicker();
</script>
HTML:
<div class="travel-dates small">
<div class="date">
<label for="checkin">Check in</label>
<div class="input-group form-group">
<input name='checkin' id="checkin" class="form-control input-sm" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
<div class="date">
<label for="checkout">Check out</label>
<div class="input-group form-group">
<input name="checkout" id="checkout" class="form-control input-sm" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
</div>
我也尝试使用 $("#checkin").datepicker("show") 在单击时调用日期选择器,当我这样做时,我收到错误 "t is undefined,",其中引用了日期选择器它的痕迹。
我一定是遗漏了什么,或者做错了什么,但我终生无法让它发挥作用。我已经浏览了关于该主题的所有其他 SO 答案,但没有找到任何有用的信息。老实说,我决定用其他东西重做他们为 jQuery UI Datepicker 所做的所有很酷的事情,而不是尝试让它在如此少的情况下继续工作错误的方式。任何帮助或建议将不胜感激。
更新:
我在上面发布的内容在我将其复制回来时最终起作用了。我正在处理的站点是一个 angular 站点,已移植到 PHP,但我的输入中仍有一些 angular 类。这些 类 没有在我们当前的 CSS 文件中定义,我们只是没有时间删除它们。出于某种原因,删除那些 类 就可以了。澄清一下,日历没有被隐藏或显示:none,它未能正确初始化。现在一切正常,但我很好奇是否有人能解开为什么额外的未定义 类 导致它失败的谜团。
原文HTML:
<div class="travel-dates small ng-isolate-scope">
<div class="date">
<label for="checkin" class="ng-scope">Check in</label>
<div class="input-group form-group">
<input name='checkin' id="checkin" class="form-control input-sm ng-pristine ng-invalid ng-invalid-required hasDatepicker" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
<div class="date">
<label for="checkout" class="ng-scope">Check out</label>
<div class="input-group form-group">
<input name="checkout" id="checkout" class="form-control input-sm ng-pristine ng-invalid ng-invalid-required hasDatepicker" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm" disabled="disabled"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
</div>
无法重现您所描述的问题。我怀疑某些东西导致加载 jQuery UI.
出现问题$(function() {
$("#checkin").datepicker();
});
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<div class="travel-dates small">
<div class="date">
<label for="checkin">Check in</label>
<div class="input-group form-group">
<input name='checkin' id="checkin" class="form-control input-sm" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
<div class="date">
<label for="checkout">Check out</label>
<div class="input-group form-group">
<input name="checkout" id="checkout" class="form-control input-sm" placeholder="mm/dd/yyyy" required="" type="text">
<span class="input-group-btn">
<button type="button" tabindex="-1" class="btn btn-default btn-sm"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
</div>
</div>