当用户在菜单打开前打开选择菜单时,我需要能够发出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;
}
});
答案 0 :(得分:0)
这应该做:
$('#MasterWrapUps').on('click', function (e) {
e.preventDefault();
...