如果值动态变化,有没有办法阻止选择菜单关闭?

时间:2016-03-01 22:00:48

标签: javascript jquery ajax

当用户在菜单打开前打开选择菜单时,我需要能够发出ajax请求。

ajax请求会告诉我应该启用或禁用哪个选项。

我首先想到的是绑定点击事件。换句话说,在click事件上进行ajax调用。使用click事件的问题是我需要在ajax请求完成时动态更改值,以确保在ajax完成后选择默认值。

我遇到的问题是每次用户点击菜单时,选项会出现并立即关闭“除非用户按住鼠标”。

我可以使用什么事件来发出我的ajax请求,启用/禁用选项但保持菜单打开而不是关闭它?

此外,在用户点击菜单后,它将始终处于值“0”,因为在用户点击该选项后,它会再次触发该事件。

这就是我所做的

$(function (e) {

    $('#MasterWrapUps').on('click', function (e) {

        var menu = $(this);

        var status = "noattempt";

        //enable only the noattempt dispos by default
        attrWrapUpMenu(menu, status);

        $.ajax({
            type: "GET",
            url: "/getstatus",
            dataType: "json",
            cache: false,
            error: function (jqXHR, textStatus, errorThrown) {
                alert("Error: " + errorThrown);
            },
            success: function (data) {

                //reselect the selected option to the default
                menu.val('0');

                if ( data && ! $.isEmptyObject(data) ) {
                    status = data.status;
                }

                attrWrapUpMenu(menu, status);

            }
        });

    });

    function attrWrapUpMenu(menu, status)
    {
        menu.find('option').each(function (index, element) {

            var option = $(element);

            if (option.val() != '0' ) {

                if (customIsAllowed(status, option)) {
                    option.attr("disabled", false);
                } else {
                    option.attr("disabled", true);
                }

            }

        });
    }

    function customIsAllowed(status, option)
    {
        var status = status.toLowerCase();

        var group = option.attr('data-group');

        if (group && group.toLowerCase().indexOf(status) > -1) {
             return true;
        }

        return false;
    }

});

1 个答案:

答案 0 :(得分:0)

这应该做:

$('#MasterWrapUps').on('click', function (e) {
    e.preventDefault();
    ...