首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅通过独立的图标而不是引用的输入字段激活YUI数据报警器?

如何仅通过独立的图标而不是引用的输入字段激活YUI数据报警器?
EN

Stack Overflow用户
提问于 2014-11-26 15:36:52
回答 1查看 2.3K关注 0票数 1

我想显示一个AUI / YUI DatePicker (教程),只要单击相应的图标( not on focusclick events )就可以激活。

代码语言:javascript
复制
var AUI = YUI;
AUI().use('event', 'aui-datepicker', function(A) {
function createCalendar(calendarInputBox) {
var datumInputField = calendarInputBox.one('input.calendar');
var datumInputFieldSelector = '#' + datumInputField.get('id').replace(/:/g, '\\:');
var datepickerIcon = calendarInputBox.one('.calendarInputIcon');

var datepicker = new A.DatePicker({
    container : datumInputFieldSelector,
    mask : '%d.%m.%Y',
    calendar : {
		firstDayOfWeek : 1,
    },
    popover : {
		zIndex : 1,
    }
});

function updateDatepickerFromInputAndShowDatepicker() {
    datumInputField.focus();
    datepicker.show();
}

datepickerIcon.on('click', updateDatepickerFromInputAndShowDatepicker);
}

A.all('.calendarInputBox').each(createCalendar);
});
代码语言:javascript
复制
<link href="http://cdn.alloyui.com/2.0.0/aui-css/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://cdn.alloyui.com/2.0.0/aui/aui-min.js"></script>
<span class="calendarInputBox" id="generated-0">
  <span class="calendarInputIcon">icon</span>
  <input id="generated-1" name="generated-2:form:from" type="text" value="" maxlength="10" class="calendar calendarFrom" />
</span>

我试着用

  • 图标作为容器,手动读取和写入日期,弹出窗口不再出现。
  • e.preventDefault()e.stopPropagation()用于输入的focusclick事件,但它没有抑制要显示的日历

似乎不可能将数据报警器与输入连接起来,而是将显示/隐藏与输入的使用分开。有什么想法吗?

这都在Liferay6.2中的JSF2.1Portlet中,如果这很重要,输入是通过以下方式构建的:

代码语言:javascript
复制
<span class="calendarInputBox">
<div class="calendarInputIcon"></div>
    <h:inputText id="from" value="#{searchData.from}" maxlength="10" styleClass="calendar calendarFrom">
        <f:convertDateTime pattern="dd.MM.yyyy" />
    </h:inputText>
</span>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-26 21:42:51

除非我弄错了,否则听起来您希望图标成为DatePickerDatePicker,并希望它更新输入。如果是这样的话,下面的代码应该可以做到这一点:

代码语言:javascript
复制
var AUI = YUI;

AUI().use('aui-datepicker', function(A) {

    var input = A.one('#input');
    var datePicker = new A.DatePicker({
        trigger: '#div',
        calendar: {
            on: {
                dateClick: function(event) {
                    input.set('value', A.Date.format(event.date,{format:datePicker.get('mask')}));
                }
            }
        }
    });
});
代码语言:javascript
复制
<script src="https://cdn.rawgit.com/stiemannkj1/701826667a70997013605edcd37e92a6/raw/469fe1ae297e72a5a80eb9015003b7b04eac735e/alloy-ui-3.0.1_aui_aui-min.js"></script>
    <link href="https://cdn.rawgit.com/stiemannkj1/90be22de7f48c729b443af14796d91d3/raw/a9f35ceedfac7fc0559b121bed105eaf80f10bf2/aui-css_css_bootstrap.min.css" rel="stylesheet"></link>
<input id="input" /><div id="div" class="icon-calendar">Click Me to Pop Up Calendar</div>

附带注意:如果您希望输入更新DatePicker,您可能会做一些类似于我在方法中所做的事情。

而且,这段代码的最终结果看起来非常类似于Liferay Faces合金组件(它使用AlloyUI DatePicker)。因此,您可能需要检查一下,看看我们是否已经以更JSF的方式解决了您的问题。

完全披露:我是Liferay Faces团队的一员,我亲自写了alloy:inputDate

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27153115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档