jQuery - ui-selectmenu-button blur() - 事件

时间:2017-03-26 20:18:44

标签: javascript jquery html jquery-ui jquery-ui-selectmenu

好的 - 所以由于某种原因,jQuery UI Selectmenu-button混乱了focus()和blur() - 事件 - 它们不会触发。有没有办法让这些事件触发,而不必在selectmenu() - 赋值中使用函数?

我问的原因是我有一个整体功能,用于输入,textarea等的焦点和模糊事件,这也很好,也可以在selectmenu上使用 - 但因为它不接受模糊和焦点,这使它更难。

目前,我有以下代码:

$('input,textarea,select').on('blur focus',function(event) {
    var $this = $(this),
        thisID = $this.attr('id'),
        thisType = $this.attr('type'),
        thisContent = $this.val(),
        thisForm = $this.parents('form').attr('id'),
        isRequired = $this.attr('required'),
        getMessage = '',
        elementPosition = $this.position(),
        elementWidth = $this.width(),
        elementHeight = $this.height(),
        checkmarkPosition = (elementPosition != undefined) ? elementPosition.left + (elementWidth-10) : '',
        topPosition = (elementPosition != undefined) ? Math.floor(elementPosition.top) : '';

        if ($(this).hasClass('required')) {
            thisContent = $this.text();
        }

        if (event.type == 'blur') {
            if (isRequired == 'required' && (thisContent == '' || thisContent == 'Can\'t be empty')) {
                getMessage = 'requiredField';
            } else if (thisType == 'email') {
                if (validateEmail(thisContent) == false) {
                    getMessage = 'notValidEmail';
                } else {
                    getMessage = 'checkMark';
                }
            } else {
                getMessage = 'checkMark';
            }
        }

    if (getMessage != '' && getMessage != undefined) {
        $.post('/returnmessages.php', {getmessage:getMessage}, function(data) {
            data = $.parseJSON(data),
            message = data.returnmessage,
            infoState = data.infostate;

            if (infoState != '' && infoState != undefined && thisType != 'submit') {
                if (infoState == 'success') {
                    $this.addClass(infoState).after('<span style="position: absolute; left: '+(checkmarkPosition)+'px; top: '+(topPosition+10)+'px;" class="fa fa-check"></span>');
                } else if (infoState == 'error' && (thisContent == '' || thisContent == undefined)) {
                    $this.addClass(infoState).prop('placeholder',message).next('span').remove();
                }
            }
        })
    }
})

适用于常规输入的常规事件,但不适用于selectmenu元素。它是一个函数,在元素本身中返回“ok”(复选标记)和不同的错误消息等,因此不需要在单独的元素中附加错误消息。

任何人都知道如何使这项工作?

1 个答案:

答案 0 :(得分:0)

如果您的意思是选择不会触发您自己的功能,您可以使用

$routeMiddleware

希望它有用