[英]IF this class exists, OR this class doesn't exist, do something with jQuery and submit form - but won't submit
我有一个表格,当用户选择衣服尺寸时,会提交表格,但是如果他们不选择任何尺寸,则会出现错误消息。 这部分效果很好,但是有时没有大小选择(例如,购买钱包时)。 如果有一个size选项,则存在一个带有“ size-attribute”类的li元素,并且在此li内还有另一个ul->具有es-value类的li,并且当用户选择一个es-value时,它将被赋予一类选择。 看起来像这样:
<li class="size-attribute>
<ul>
<li class="es-value"></li>
<li class="es-value selected"></li>
<li class="es-value"></li>
</ul>
</li>
但是,如果没有可供选择的大小(例如钱包),则不存在具有类别大小属性的列表项。 我正在尝试编写我的代码,以便当存在带有选定类的es值或根本不存在大小属性时,将提交表单。 但是,使用我编写的代码,当我单击“添加到购物袋”时,什么也没有发生。 这是我的代码:
.on('click', '.modalAddToBagButton', function(e) {
e.preventDefault();
$form = $(this).closest("#dialog-addToBag").find('form');
if( $( ".es-value.selected" ).length || !$("li .size-attribute")) {
$form.submit();
} else {
$("#errormessage").show();
$("#error-border").addClass("error-border");
}
谁能弄清楚我做错了什么,为什么表格不提交?
问题在于条件: ( $( ".es-value.selected" ).length || !$("li .size-attribute"))
第二部分!$("li .size-attribute"))
将始终返回false。 这样做的原因是$(...)
返回一个对象。 用javascript编写的对象始终是真实的,因此!$(...)
始终是false-y。
最后, $("li .size-attribute")
实际上并不代表您要寻找的东西。 li .size-attribute
表示一个元素,其类别size-attribute
位于li
类型的元素中,而您想要的是$("li.size-attribute")
- li
类型的元素,其类别为size-attribute
如果您以与第一部分相同的方式构造它并修复css查询,则它将起作用,例如。 ( $( ".es-value.selected" ).length || !$("li.size-attribute").length)
尽管我通常倾向于采用更具描述性的方法:
.on('click', '.modalAddToBagButton', function(e) {
e.preventDefault();
$form = $(this).closest("#dialog-addToBag").find('form');
if( $( ".es-value.selected" ).length > 0) {
// a size was selected
$form.submit();
} else if ($("li.size-attribute").length === 0) {
// No size option was present
$form.submit();
} else {
$("#errormessage").show();
$("#error-border").addClass("error-border");
}
});
我将使用jQuery的.hasClass()方法来检查是否存在任何大小属性。
.on('click', '.modalAddToBagButton', function(e) {
e.preventDefault();
$form = $(this).closest("#dialog-addToBag").find('form');
if( $( ".es-value.selected" ).length || !$("li").hasClass("size-attribute")){
$form.submit();
} else {
$("#errormessage").show();
$("#error-border").addClass("error-border");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.