Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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 jQuery&;处理元素ID';s_Javascript_Jquery - Fatal编程技术网

Javascript jQuery&;处理元素ID';s

Javascript jQuery&;处理元素ID';s,javascript,jquery,Javascript,Jquery,我有以下代码: function mandatoryField(manF) { var fieldId = $(manF).val(); if(fieldId == "") { return false; } else { return true; } } 它不起作用,但它可以: function man

我有以下代码:

    function mandatoryField(manF)
    {
        var fieldId = $(manF).val();
        if(fieldId == "")
        {
            return false;
        }
        else
        {
            return true;
        }
    }
它不起作用,但它可以:

    function mandatoryField()
    {
        var fieldId = $("#element_1").val();
        if(fieldId == "")
        {
            return false;
        }
        else
        {
            return true;
        }
    }
假设,在我的第一个示例中,mandatoryField被称为:

  mandatoryField("#element_1")
当我尝试用变量替换绝对元素ID名称时,为什么它不起作用

编辑:

最新代码-非工作:

    function isAmExSelected()
    {
         return $("#creditCardType").val() == "American Express";
    }

    function containsOnlyDigits(str)
    {
         return str.match(/[^0-9]/) == null;
    } 

    function validateCCNumber()
    {
         var ccn = $("#creditCardNumber").val();
         var onlyDigits = containsOnlyDigits(ccn);
         if(isAmExSelected())
         {
             return ccn.length == 15 && onlyDigits;
         }
         else
         {
             return ccn.length == 16 && onlyDigits;
         }
    }

    function mandatoryField(manF) 
    {
        var fieldId = $("#" + manF).val();
        return fieldId != "";
    }


    function registerValidation(id, validateMethod(), errorMethod)
    {
          $(id).change(function(){
              if(validateMethod() == false)
              {
                  errorMethod();
              }
          });
    }


    $(document).ready(function(){
        registerValidation("#creditCardNumber", validateCCNumber, function(){alert("Invalid Credit Card Number!")});
        $('input[type=text][class=mandatory]').blur(function(){
            if (mandatoryField(this.id)) {
                     alert('Field:' + this.id + ' is mandatory!')
            }
        });
    });
编辑2

我把整件事改写成这样:

        $('input[type=text][class=mandatory]').blur(function(){
            if (!($("#" + this.id).val().length)) {
                     alert('Field:' + this.id + ' is mandatory!');
            }
        });
function mandatoryField(manF){
    return $(manF).val().length;
} 

如果强制类的文本输入模糊,则运行函数:如果#foo.val()没有长度(即其中没有文本),则运行警报。我相信它应该能工作,但它不能。

好的,这不起作用,因为jquery将假定manF是一个DOM对象,而您正在传递字符串

你试过吗

var tr = $('#element1') //----------1

alert($(tr).val()) //------------2
tr实际上是一个dom对象

更新::

你为什么不试试这个

//some code on some event

if(!check_mandatory())
//do something else

else do another thing

//some code on some event
以及功能

function check_mandatory()
{
    $('.mandatory').each(function{
        if($(this).val() == ""){
            alert($(this).attr("name") + "required");
                            //or you can use id or any attrib
            return false;
        }
    })
}
注意未经测试的代码可能无法工作,如果无法工作,请告诉我

尝试以下方法:

    function mandatoryField(manF)
    {
        if($('#' + manF).val() == "")
        {
            return false;
        }
        else
        {
            return true;
        }
    }
mandatoryField("element_1");
但这将得到元素的值,而不是id。我不确定您想要实现什么

场模糊触发选项:

$('input[type=text][class=classForMandatoryFields]').blur(function(){
 if (mandatoryField(this.id)) {
   alert('Field:' + this.id + ' is mandatory!')
 }
});

将代码更新为:

function mandatoryField(manF)
{
    var fieldId = $("#" + manF).val();
    if(fieldId == "")
    {
        return false;
    }
    else
    {
        return true;
    }
}
然后再试一次。

您能试试:

var fieldId = manF.val();

mandatoryField($("element_1"));

无论选择器是作为参数传入,还是作为文本直接提供给
$
,这两段代码的工作方式都应该相同。另外,您可以执行以下操作,而不是使用
if..else

function mandatoryField(manF) {
    var fieldId = $(manF).val();
    return fieldId != "";
}

除了选择器问题外,您还可以像这样重写函数:

        $('input[type=text][class=mandatory]').blur(function(){
            if (!($("#" + this.id).val().length)) {
                     alert('Field:' + this.id + ' is mandatory!');
            }
        });
function mandatoryField(manF){
    return $(manF).val().length;
} 
这是因为在JavaScript中,所有内容都有真假含义。对于数字,0为假

编辑:

我的测试很好:

function mandatoryField(manF){
    return $(manF).val().length;
}

(...)

<input id="test" value=""/>
<input type="button" value="dd" onClick="alert('length: ' + (mandatoryField('#test'))"/>
功能命令字段(manF){
返回$(manF).val().length;
}
(...)

我认为变量可能是字符串,但仍然有效?我该如何解决这个问题?@Andrei检查jao-answer或Marek'answer,确定它一定能工作。我正在测试输入类型=名为#element_1的文本元素是否键入了内容。我已经编辑了脚本,它应该能工作。试试看,让我知道。此外,如果您提供更多信息,我们可以使此过程更简单、更快,例如在表单提交或实地休假事件(模糊)中检查。更多信息可以在这里找到:你最新的编辑仍然不起作用,我已经用我最新的代码更新了我的问题。请检查这个例子:你的函数在那里起作用。让我问一个愚蠢的问题:您是否将jQuery包含到您的站点中了?;)这与我在问题中描述的方式不同。也许你可以为你的示例创建一个。你不需要强制传递强制字段名