gpt4 book ai didi

javascript - 如何在使用 jQuery Selectric 打开之前禁用菜单选项?

转载 作者:行者123 更新时间:2023-11-29 21:32:42 25 4
gpt4 key购买 nike

我终于找到了一个足够智能的选择菜单插件,可以在 IE 比较模式下工作,并且还允许我在菜单选项被替换之前触发一个事件。这个很棒的插件叫做 jQuery Selectric .

我需要在显示选项之前触发一个事件,我想发出一个 ajax 请求,告诉我应该启用/禁用哪个选项。

我能够在菜单打开之前发出 ajax 请求。但我很难尝试禁用这些选项。即使在我禁用它们之后,这些选项也始终处于启用状态。

我尝试在 ajax 上使用 $('select').selectric('refresh'); 成功,但他导致了菜单永远无法打开的问题,因为就在之前它打开 ajax 请求将再次关闭它。

如何即时禁用选项?

这是我做的

    $('#MasterWrapUps').selectric();

$('#MasterWrapUps').on('selectric-before-open', function (e) {

var status = "noattempt";

$.ajax({
type: "GET",
url: "/getStatus",
dataType: "json",
cache: false,
success: function (data) {

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

attrWrapUpMenu(status);

}
});

});

function attrWrapUpMenu(status)
{
$('.dispositionMenuOption').each(function (index, element) {

var option = $(element);

if ( customIsAllowed(status, option) ) {

option.attr("disabled", false);

} else {

if( option.attr('selected') ) {
//At this point we know the option that is select can't be used, select the default value
$('#MasterWrapUps').val('0')
}

option.attr("disabled", true);
}

});
}

最佳答案

由于您无法知道ajax 需要多长时间才能完成,所以我可以想到两种可能的解决方案:

首先是显示一个隐藏的<div>在输入上,单击时,在其中显示加载图像。然后等到ajax结束,最后隐藏div和trigger更新的 <input> 上的点击事件, 或 ....

您可以在页面加载后立即启动更新功能并保留 <select>禁用直到 ajax 完成。

我推荐第二种,但可能还有其他解决方案。如果您在实现其中任何一个方面需要任何帮助,您应该提出一个新问题。


更新

既然您想在点击后执行此操作,那么我能想到的最好的解决方案就是这个解决方案。它的缺点是如果 ajax 花费的时间太长并且用户离开了选择输入,它无论如何都会重新打开。但我认为这可以通过一些焦点/类验证来解决。我会把它交给你。

我必须提醒您,这种 UI 可能会让一些用户(网络连接不良的用户)对可用或不可用感到困惑。

$('#MasterWrapUps').selectric().on('selectric-init', function () {
$('#MasterWrapUps').selectric('open');
});
$('.selectric').on('click', function () {
setTimeout(function () { /* fake ajax */
$('option:first-child').attr('disabled', true);
$('#MasterWrapUps').selectric('refresh');
}, 600 );
});
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script src="http://lcdsantos.github.io/jQuery-Selectric/jquery.selectric.js"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<link rel="stylesheet" href="http://lcdsantos.github.io/jQuery-Selectric/selectric.css">
<style>.selectric-above .selectric-items {top: 100%; bottom: auto}</style>
</head>
<body>
<select id="MasterWrapUps">
<option value="ant">Ant</option>
<option value="bird">Bird</option>
<option value="cat">Cat</option>
</select>
</body>
</html>

关于javascript - 如何在使用 jQuery Selectric 打开之前禁用菜单选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35752780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com