我遇到了一个问题,jQuery数据报警器无法显示日历,因为有东西吞噬了事件。似乎是AngularJS造成了这个问题。你可以在:jsfiddle.net实例上看到它
在jsfiddle示例中,我在页面底部创建了一个数据报警器,它一直出现,直到单击Init DatePicker按钮才初始化。
下面是init()方法,我在这里初始化了jQuery中详细介绍的jquery数据报警器。
function init(selId)
{
if (console.log !== undefined)
{
console.log("init()...");
}
$(function() {
$( ".datepicker" ).datepicker({
changeMonth: true,
changeYear: true
});
});
if (selId !== undefined)
{
$(".datepickFix").on("click","#" + selId, function (){
$(".datepicker").datepicker( "show" );
});
}
else
{
$(".datepickFix").on("click",".datepickFix", function (){
$(".datepicker").datepicker( "show" );
});
}
}试试这个
继续单击“编辑”框或单击me text,您将看到它没有显示jQuery数据报警器。
按预期工作
现在,单击Init DatePicker按钮,再一次尝试单击“编辑”框,您将看到如您所期望的日历显示。如果你点击点击我的文本,它也会显示。一切都如期而至。
ng-重复- addrow()调用init(),现在单击Add Row按钮并注意,我正在AngularJS中执行ng-重复以向表添加行。该行包含另一个"datepicker“,在添加该行时调用Init()代码。
我还从div的onclick调用init(),仅仅是为了让它着火。
数据报警器仍然不显示
但是,请注意,尽管init()被调用--由console.log确认--您将看到单击新行中的“编辑”框(jquery )并不会显示数据交换。
现在,如果单击行中的单击me文本,或者单击Init DatePicker,日历现在将显示。
单击Add行按钮两次,使第一个添加行工作,而不是其他,如果您单击添加行按钮两次,日历将显示在最初单击第一个添加行时。
但是,如果我多次调用init(),也不起作用。有人能说明一下这个问题吗?
发布于 2013-12-25 20:03:40
我采纳了angabriel的建议,并学会了如何使用指令正确地做到这一点。您可以看到它在以下位置工作:显示jQueryUI日历的快捷键
为了让这一切顺利进行,付出了太多的努力。道路!
您只需单击Add按钮,就可以通过ng-重复指令插入一个新行,然后您将看到日历文本框和日历按钮。看起来会是这样的:

我使用在/ by:https://github.com/angular-ui/ui-date上创建的指令,您需要的所有代码都位于date.js文件中的src目录中。
当然,还需要添加对jQuery和jQueryUI的引用。
角模
一旦您这样做,您需要初始化您的角度模块,如下所示:
var myAppModule = angular.module('extra', ['ui.date']);
myAppModule.controller('taskController', taskController);注意,angular.module调用的第二个参数是对date.js文件中的角指令的引用。
标记示例
<div class="control-group input-append input-group" >
<input id="{{l.id}}cb"
class="input form-control cb" ui-date="dateOptions"
ui-date-format="DD, d MM, yy" value="{{l.completedBy}}"
value="completedBy" type="text" data-ng-model="l.completedBy" />
<span class="btn input-group-addon add-on"
data-ng-click="showCalendar(l.id,'cb')" >
<span class="glyphicon glyphicon-calendar"></span>
</span>注意,ui-date元素上的<input属性是引用,它将文本框转换为数据报警器。
配置jQueryUI数据报警器:传递到AngularJS指令
dateOptions项是一个对象,它可以与值一起发送以设置您的数据报警器,并且与jQueryUI相关。
在我的控制器顶部,我设置了以下选项,这些选项迫使datepicker显示月和年下拉列表。
$scope.dateOptions ={ changeYear: true,changeMonth: true };
看起来是这样的:

只在您单击“文本框”部分时才有效。
问题是,只有单击文本框部分时才会出现数据报警器。还有更多工作要做。
我在我的(引导)按钮上添加了一个ng点击,然后在我的控制器中添加了一个处理日历显示的方法。看起来是这样的:
function showCalendar(id,datepickerType)
{
$("#"+id+datepickerType).datepicker("show");
console.log(id + " : " + datepickerType);
}挑战
问题是,您必须有一种方法来连接日历,它显示的是输出值,即原始数据报警器。这成为一个挑战,因为我们可以有一个未知数目的行数未知的数据显示器和相关的“文本”框。请注意我如何进行jQuery选择以获得正确的值,因此当您选择一个值时,它会落在正确的datepicker文本框中。
注意到:我使用的是角v1.2.3,而且它都在工作。开始在jsfiddle上设置示例,该示例目前只支持AngularJS v1.2.1,并且该示例不起作用--日历不会弹出。将CDN添加到最新版本的AngularJS v.1.2.6中,并开始工作。
https://stackoverflow.com/questions/20732532
复制相似问题