Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果所有表单输入不包含特定值,则不确定如何执行操作_Javascript_Jquery_Forms - Fatal编程技术网

Javascript 如果所有表单输入不包含特定值,则不确定如何执行操作

Javascript 如果所有表单输入不包含特定值,则不确定如何执行操作,javascript,jquery,forms,Javascript,Jquery,Forms,这更像是一个如何处理这种情况的问题 我有一个表单,如果任何表单输入包含“.ca”、“canada”或“canada”,我需要执行一个操作,但是如果字段不包含这些字符串,我还需要反转该操作。理想情况下,此操作将在表单完成时触发(如果需要),而不是在单击提交时触发 我的代码用于检查“.ca”、“canada”或“canadian” 上述代码的问题是,它没有任何有效的条件,因为特殊字段在激活后将永远不会重新隐藏 如果在else条件下删除“If(optinFieldsVisible==false)”,则

这更像是一个如何处理这种情况的问题

我有一个表单,如果任何表单输入包含“.ca”、“canada”或“canada”,我需要执行一个操作,但是如果字段不包含这些字符串,我还需要反转该操作。理想情况下,此操作将在表单完成时触发(如果需要),而不是在单击提交时触发

我的代码用于检查“.ca”、“canada”或“canadian”

上述代码的问题是,它没有任何有效的条件,因为特殊字段在激活后将永远不会重新隐藏

如果在else条件下删除“If(optinFieldsVisible==false)”,则如果用户在当前选定的输入中工作,该字段将正确显示和隐藏,但在下一个输入中键入任何内容后,该字段将立即重新隐藏(因为正则表达式在当前选定的新表单输入中返回false)

很明显,一个标志变量不是解决方案,某种类型的计数器变量在这里也不起作用。有人有指针吗

编辑:
请参阅现场演示

我不确定是否正确理解您的意思,但这可能正是您想要的:

var optInFieldIsVisible = false;
var optInField = jQuery( 'input[name*="email"]' );

jQuery("*").find('input').bind('input propertychange', function() {
    if (/.ca$|canada|canadian/i.test( jQuery(this).val() && !optInFieldIsVisible ) ) {
        optInFieldIsVisible = true;
        optInField.closest( '.formField' ).show();
            // show special form field because reference to canada is present
    }
    else if (optInFieldIsVisible){
            optInFieldIsVisible = false;
            optInField.closest( '.formField' ).hide();
            // hide special form field because reference to canada is removed
    }
 });
结帐,这是你想做的事吗

var optInFieldIsVisible = false;
var optInField = jQuery( 'input[name*="opt-in"]' );
optInField.closest( 'div.formField' ).hide();

jQuery("*").find('input').bind('input propertychange', function() {
    if (/.ca$|canada|canadian/i.test( jQuery(this).val() ) ) {
        optInFieldIsVisible = true;
        optInField.closest( 'div.formField' ).show();
    }
    else {
        optInFieldIsVisible = false;
        optInField.closest( 'div.formField' ).hide();
    }
 });

这就是我提出的解决方案。添加了一个新功能:

/* clear required field on focusout if triggers are removed from all fields */
jQuery("*").find('input').focusout(function(){
    var eList = []; 
    jQuery("*").find('input').each( function() { 
        if ( /.ca$|canada|canadian/i.test( jQuery(this).val() ) == false ) {
            eList.push(false);
            }
        else {
            eList.push(true);
        }
    })
    if ( jQuery.inArray(true, eList )==-1 ) {
        optInField.closest( '.formField' ).hide();
    }
})

还从我的原始代码中删除了else语句,因为添加上述语句后不再需要它。请参见

能否提供一个提琴,使您的问题更直观易懂?我添加了一个jsbin。很抱歉一开始就应该包括在内。谢谢。但是,当不满足if条件时,使optInField重新隐藏的挑战仍然存在。我希望我添加的jsbin有帮助,并感谢您查看。您希望在不满足条件时隐藏电子邮件输入吗?复选框是我希望显示的输入,或者隐藏复选框,并在您的jsbin中可见!因为我换了小提琴:)
/* clear required field on focusout if triggers are removed from all fields */
jQuery("*").find('input').focusout(function(){
    var eList = []; 
    jQuery("*").find('input').each( function() { 
        if ( /.ca$|canada|canadian/i.test( jQuery(this).val() ) == false ) {
            eList.push(false);
            }
        else {
            eList.push(true);
        }
    })
    if ( jQuery.inArray(true, eList )==-1 ) {
        optInField.closest( '.formField' ).hide();
    }
})