0

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

我问的原因是我有一个整体功能,用于输入、textarea 等上的焦点和模糊事件,这也可以在选择菜单上使用 - 但因为它不接受模糊和焦点,这使得它有点困难。

目前,我有以下代码:

$('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();
                }
            }
        })
    }
})

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

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

4

1 回答 1

0

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

$( "#selectionSomething" ).selectmenu({
    change: function(){
        $(this).trigger('blur')
    }
});

希望它有用

于 2017-03-27T04:03:12.847 回答