首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择:从多个选择中追加和删除项

选择:从多个选择中追加和删除项
EN

Stack Overflow用户
提问于 2014-02-26 19:09:18
回答 2查看 7.1K关注 0票数 0

编辑:我会更好地解释我的问题:

我使用Jquery-plugin ->创建了一个选择倍数。我在Select Ajax+Php+MySQL中创建选项,如下所示:

代码语言:javascript
复制
$("#Enmarcado").append(array_items[x]); //inside a loop
[...]
$("#Enmarcado").trigger("chosen:updated");

现在,在创建了Select之后,我希望验证您可以选择哪些选项:

这是我的选择(由Ajax+Php+MySQL创建的html)

代码语言:javascript
复制
<select id="Enmarcado" name="Enmarcado" data-placeholder="Elije los acabados..." class="chosen-select" multiple="" onchange="validar_enmarcado();">
    <option selected="" value="-1">Sin Acabados</option>
    <option value="20">Kappa-fix 10mm (PVC)</option>
    <option value="19">Kappa-fix 5mm (PVC)</option>
    <option value="18">Laminado mate (75 micras producción)</option>
    <option value="17">Laminado brillo (75 micras producción)</option>
    <option value="16">Laminado mate (30-50 micras)</option>
    <option value="15">Laminado brillo (30-50 micras)</option>
    <option value="14">Plastificado brillo (125 micras)</option>
    <option value="13">Plastificado brillo (75 - 80 micras)</option>
    <option value="11">Adhesivado</option>
    <option value="7">Kappa-fix 10 mm (cartón pluma alta densidad)</option>
    <option value="6">Kappa-fix 5 mm (cartón pluma alta densidad)</option>
    <option value="5">Laminado Mate (proteccion uv)</option>
    <option value="4">Laminado Brillo (proteccion uv)</option>
    <option value="3">Aluminio</option>
    <option value="2">Bastidor 4 cm</option>
    <option value="1">Bastidor 2 cm</option>
    <option value="9">Dibond 3mm (sandwich aluminio + pvc)</option>
</select>

第一个选项是绝对的:如果您选择它,它将清除所有其他选项。

代码语言:javascript
复制
<option selected="" value="-1">Sin Acabados</option>

但是,如果选择了此选项,则要删除该选项,并在选择另一个选项时保留新的选定选项:

代码语言:javascript
复制
<option selected="" value="-1">Sin Acabados</option> <!-- Selected yet -->
<option value="20">Kappa-fix 10mm (PVC)</option> <!-- I want select this, clearing value =-1 from the selected options. -->

我的验证功能:

EDIT2:

代码语言:javascript
复制
function validar_enmarcado(){
    var obj = document.getElementById ("Enmarcado");
    var enmarcado = new Array();

    var i = 0;
    var u = 0;
    var y = 0;
    var cont = 0;
    var opt1 = "";
    var opt2 = "";

    enmarcado = obj.selectedOptions;
    if(enmarcado.length>1){
        for (i=0; opt1=enmarcado[i];i++){
            for (u=i+1; opt2=enmarcado[u];u++){
                if(opt1.value == -1){
                    if(opt2.value >= 1){
                        $("#Enmarcado").chosen();
                        $("#Enmarcado").val(-1).trigger("chosen:updated");
                        jAlert("Si elige Sin Acabados, no puede haber acabados en la lista.","Error de Acabado");
                    }
                }
                if(opt1.value == 6 || opt1.value == 7 || opt1.value == 9 || opt1.value == 19 || opt1.value == 20){
                    if(opt2.value == 6 || opt2.value == 7 || opt2.value == 9 || opt2.value == 19 || opt2.value == 20){
                        jAlert("No puede elegir dos Soportes al mismo tiempo, elimino uno.","Error de Acabado");
                    }
                }
                if(opt1.value == 1 || opt1.value == 2){
                    if(opt2.value == 1 || opt2.value == 2){
                        jAlert("No puede elegir dos Bastidores al mismo tiempo, elimino uno.","Error de Acabado");
                    }
                }
                if(opt1.value == 4 || opt1.value == 5 || opt1.value == 13 || opt1.value == 14 || opt1.value == 15 || opt1.value == 16 || opt1.value == 17 || opt1.value == 18){
                    if(opt2.value == 4 || opt2.value == 5 || opt2.value == 13 || opt2.value == 14 || opt2.value == 15 || opt2.value == 16 || opt2.value == 17 || opt2.value == 18){
                        jAlert("No puede elegir dos Laminados o Plastificados al mismo tiempo, elimino uno.","Error de Acabado");
                    }
                }
            }
        }
    }
}

问题是:

代码语言:javascript
复制
<option selected="" value="-1">Sin Acabados</option>

这是默认选项,当我选择其他选项时,我希望删除它。但我不知道如何做,而不删除其他的验证。

我无法从$(“#Enmarcado”)列表中选择最后一个选项。selectedOptions[],因为多个选择总是用$("#Enmarcado").options[]顺序重新排序所选的项。

谢谢你的帮忙!

EDIT3:

我刚刚找到了一些代码,这些代码为我提供了“选中的选项值”:

代码语言:javascript
复制
$("#Enmarcado").chosen().change(function() {
    alert(+$(this).val());
});

但当我选择多个选项时,它会向我发送NaN。有人能帮我把这个插入到我的验证函数中吗?

对此的响应:删除$(this).val()之前的+,它将向您发送一个带有所选值的字符串。但这并不是我想要的:我需要知道我刚才选择了哪个选项(或者单击了哪个选项)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-05 16:57:30

我今天通过使用Google找到了解决方案

代码语言:javascript
复制
var foo = [];
$('#EnmarcadoChosen :selected').each(function(i, selected){
    foo[i] = $(selected).text(); // you can get the .value() too, and compare it.
});
票数 1
EN

Stack Overflow用户

发布于 2014-02-27 13:51:33

它可以简单到:$("#Enmarcado option[value='-1']").remove();

但是,如果上面的内容在您的上下文中不起作用,那么您可以在这个答案的VirtualTroll基础上构建吗?(如果是的话,也请投他的票。)在你的例子中,这可能看起来是:

代码语言:javascript
复制
for (i=0; i<obj.length; i++) {
   if (obj.options[i].value=='-1') {
     obj.remove(i);
   }
}

注意一些更温和的方法,这样以后就可以更容易地打开缺省值了:

1:$("#Enmarcado option[value='-1']").hide();

2:$("#Enmarcado option[value='-1']").attr('disabled','disabled');

更新:

从下面的新评论中可以清楚地看到,您现在并不是在“删除”或“删除”选项--您只是想清除或“取消”选项的选择。虽然我不知道答案,但我认为我找到了答案。(同样,如果这个信息对你有用,也请投出他们的答案。)

(1)注Sudhir Kesharwani的解决方案。我想他的代码可以清除所有的选择。那么,尝试修改他的代码,这个速记版本会起作用吗?:

代码语言:javascript
复制
$("#Enmarcado option[value='-1']").removeAttr("selected");
$("#Enmarcado").trigger("chosen:updated");

(2)您可能会发现这些文档很有用。在约瑟夫·西尔伯的回答中,他提到了这里的文件,他说:“(查找标题为”更新动态选择的“一节)。它解释说,在任何选择更改之后,都必须触发chosen:updated

希望这能帮上忙..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22050905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档