4

我有一个输入框,它与 datepicker 绑定。在我看来,除了这个输入框外,还有一个小日历图标。当用户单击此日历图标时,我想触发输入框的单击事件。我已经使用已应用于日历图标的指令来完成此操作。但它几乎像 jQuery。那么有什么不同的方法可以实现这一目标吗?如果我的方法是错误的,那么请引导我走向正确的方向。我是 Angular 的新手,我读过一些避免使用 jQuery 的文章。谢谢

My Directive

myApp.directive('openCal',function($compile,$filter) {
    return {
        link:function(scope,element,attrs) {
            element.bind("click",function() {
                element.siblings("input").trigger("click");
            });
        }
    };
});

它工作正常。但我不确定这是正确的方法吗?

4

2 回答 2

0

不,如果我理解你想要做什么,你会让事情变得过于复杂。

在您的情况下,您可能会遇到以下情况:

<img open-cal/>
<input ng-click="doSomething()">

通过 openCal 指令单击 img 会触发对输入的单击。而是考虑做这样的事情:

<div ng-click="doSomething()">
  <img>
  <input>
</div>

如果 doSomething() 需要从输入中获取数据,请使用 ng-model 将输入中的数据绑定到范围。

虽然!如果您需要执行指令,那是正确的方法。使用 element.bind 不是问题,因为它包含在 Angular 中。您要避免使用诸如 $('.calendar').click 之类的东西。

于 2013-08-20T13:31:45.840 回答
0

解决此问题的另一种方法是为<label>包含日历的输入字段添加一个元素。然后单击日历将聚焦输入字段。然后你所要做的就是focus在你的输入字段上监听事件来做你的额外工作。如果有人通过键盘通过按键导航到您的输入字段,这会带来额外的工作好处tab

于 2015-01-22T19:07:27.350 回答