jQuery&处理元素ID

时间:2011-02-04 07:42:20

标签: javascript jquery

我有以下代码:

    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!');
            }
        });

如果强制类的文本输入模糊,则运行函数:如果#foo.val()没有长度(即没有文本),请运行警报。我相信它应该有效,但事实并非如此。

6 个答案:

答案 0 :(得分:1)

试试这个:

    function mandatoryField(manF)
    {
        if($('#' + manF).val() == "")
        {
            return false;
        }
        else
        {
            return true;
        }
    }
mandatoryField("element_1");

但这会让你获得元素的价值,而不是它的身份。我不确定你要完成什么。

触发场模糊选项:

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

答案 1 :(得分:1)

将代码更新为:

function mandatoryField(manF)
{
    var fieldId = $("#" + manF).val();
    if(fieldId == "")
    {
        return false;
    }
    else
    {
        return true;
    }
}

然后再试一次。

答案 2 :(得分:1)

无论选择器是作为参数传入,还是直接作为$的文字提供,两段代码都应该相同。另外,您可以执行

而不是if..else
function mandatoryField(manF) {
    var fieldId = $(manF).val();
    return fieldId != "";
}

答案 3 :(得分:0)

好的,这不起作用,因为jquery会假设manF是一个DOM对象,而是你传递字符串。

你有没有试过

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

alert($(tr).val()) //------------2

tr实际上是一个dom对象

<强> UPDATE ::

你为什么不尝试这个

//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;
        }
    })
}

注意代码可能无法运行未经测试,如果无效则请告知我

答案 4 :(得分:0)

你可以尝试一下:

var fieldId = manF.val();

mandatoryField($("element_1"));

答案 5 :(得分:0)

除了你的选择器问题,你可以像这样重写你的函数:

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'))"/>