【问题标题】:trigger change event after picking from dropdown从下拉列表中选择后触发更改事件
【发布时间】:2017-10-10 05:54:13
【问题描述】:

我有一个 JQuery 时间选择器定义为

<div class="form-group">  
    <label class="col-xs-4 col-md-3 control-label" align="right">
        <div class="pull-right">{{ jc_settings_form.meeting_time.label() }}</div>
    </label>
    <div class='col-xs-8 col-md-9 dateContainer' style="max-width:200px">
        <div class='input-group input-append date'>
            <input type="select" class="form-control timepicker" name="meeting_time" id="meeting_time"/>
        </div>
    </div>
</div>

这是表单中的一个选项,我想在用户更改字段时运行表单的自动验证,所以我有一些类似

的 javascript
$('.manage_jc_settings_form')
    .formValidation({
        framework: 'bootstrap',
        excluded: ':disabled',
        ignore: [],
        icon: {
            valid: 'glyphicon glyphicon-ok',
            invalid: 'glyphicon glyphicon-remove',
            validating: 'glyphicon glyphicon-refresh'
        },
        fields: {
            name: { 
                meeting_time: {
                    validators: {
                        notEmpty: {
                            message: 'Please provide a meeting time'
                        }
                    }
                },...

如果我从 timepicker 下拉列表中选择一个时间,它甚至不会触发更改,因此不会验证表单?如果我单击文本字段并手动更改时间,它是否会触发更改? 这是我的时间选择器初始化

(function($) {
    $(function () {
        $('#meeting_time').timepicker({
            defaultTime: '{{ jc_settings_form.meeting_time.default }}',
            dropdown: true,
            scrollbar: true,
            startTime: '9:00 am',
            timeFormat: 'h:mm a', // equivalent to 'h:mm a'
            interval: 5 //Number of minutes the up/down arrow's will move the minutes value in the time picker
        });
    });
})(jQuery);

知道如何强制它触发更改事件吗?我想也许我必须更改输入字段的 type="text" 属性?

【问题讨论】:

    标签: javascript jquery timepicker


    【解决方案1】:

    您可以像这样在 jQuery Timepicker 的更改事件上运行一个函数:

    (function($) {
        $(function () {
            $('#meeting_time').timepicker({
                defaultTime: '{{ jc_settings_form.meeting_time.default }}',
                dropdown: true,
                scrollbar: true,
                startTime: '9:00 am',
                timeFormat: 'h:mm a', // equivalent to 'h:mm a'
                interval: 5,
                change: function(time) {
                    alert('things changed');        
                }
            });
        });
    })(jQuery);
    

    It's listed on the docs here.

    【讨论】:

    • 谢谢,这似乎有效...您知道如何防止在页面加载期间触发更改事件吗?
    • 试着把你所有的jQuery放在document ready block中。
    【解决方案2】:

    您的帖子并不完全清楚您要做什么。如果您希望每次从下拉列表中选择不同的选项时验证表单,您可能想尝试使用onchange,如下所示:

    &lt;input type="select" class="form-control timepicker" name="meeting_time" id="meeting_time" onchange="yourValidationFunction()" /&gt;

    我还考虑尽可能远离 jQuery,因为您最终可能会发现它的语法糖导致的问题多于它解决的问题(更不用说它大大延长了页面加载时间)。

    【讨论】:

    • 您对替代时间选择器有什么建议吗?我环顾四周,但不知道该选哪一个……
    • 我个人只会手动写一个。这可能是也可能不是您的选择。您使用的是 React 或 Angular 等前端框架吗?
    • 我正在使用烧瓶...而且我的 javascript 不够好,无法自己编写此代码
    • Flask 是一个后端框架,所以你可能只是在前端使用 vanilla JavaScript(无框架)。
    • 是的,没错...我不得不说我正在尝试摆脱 jquery,但我的项目现在与它交织在一起,非常困难且耗时...
    猜你喜欢
    • 2017-03-21
    • 2012-08-19
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    相关资源
    最近更新 更多