修改 我会更好地解释我的问题:
我有一个使用Jquery-plugin创建的Select Multiple - >选择的。 我在Select with Ajax + Php + MySQL中创建了选项,并且:
$("#Enmarcado").append(array_items[x]); //inside a loop
[...]
$("#Enmarcado").trigger("chosen:updated");
现在,通过选择创建,我想验证您可以选择哪些选项:
这是我的选择(由Ajax + Php + MySQL创建的html)
<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>
第一个选项是绝对选项:如果选择它,它将清除所有其他选项。
<option selected="" value="-1">Sin Acabados</option>
但如果我选择了此选项,我想删除它,并在选择其他选项时保留新选择的选项:
<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:
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");
}
}
}
}
}
}
问题是:
<option selected="" value="-1">Sin Acabados</option>
这是默认选项,我想在选择其他选项时将其删除。但我不知道怎么做,没有删除其他验证。
我无法从$(“#Enmarcado”)。selectedOptions []列表中选择最后一个选项,因为多重选择始终使用$(“#Enmarcado”)。options [] order重新排序所选项目。< / p>
感谢您的帮助!
EDIT3:
我刚发现一些代码给了我“选择的选项值”:
$("#Enmarcado").chosen().change(function() {
alert(+$(this).val());
});
但是当我选择多个选项时,它会向我发送NaN。任何人都可以帮助在我的验证函数中插入它吗?
对此的响应:删除$(this).val()之前的+,它会向您发送一个包含所选值的字符串。但这不是我想要的:我需要知道我选择(或点击)的选项。
答案 0 :(得分:1)
我今天使用Google找到了the solution:
var foo = [];
$('#EnmarcadoChosen :selected').each(function(i, selected){
foo[i] = $(selected).text(); // you can get the .value() too, and compare it.
});
答案 1 :(得分:0)
可能很简单:$("#Enmarcado option[value='-1']").remove();
但如果以上内容在您的上下文中不起作用,您是否可以通过VirtualTroll构建 this answer ? (如果是这样的话,也可以投票给他。)在你的情况下,这可能看起来像:
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's solution here 。我认为他的代码会清除所有选项...所以,尝试更改他的代码,这个简写版本会起作用吗?
$("#Enmarcado option[value='-1']").removeAttr("selected");
$("#Enmarcado").trigger("chosen:updated");
和(2),您可能会发现文档很有用。在Joseph Silber's answer here中,他引用the documentation here,说“(找到标题为动态更新动态的部分)。”它解释了您必须在任何选择更改后触发chosen:updated
。
我希望有帮助...