2011-02-04 61 views
1

我有以下代码:jQuery和处理机构ID的

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

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

+0

也许你可以为你的例如http://jsfiddle.net/。 – 2011-02-04 08:11:29

+0

你不需要强制传递必填字段名称 – 2011-02-04 08:59:32

+0

看看我的更新 – 2011-02-04 14:34:22

回答

0

好吧,这将无法正常工作,因为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; 
     } 
    }) 
} 

代码可能行不通没有测试,如果它不工作,然后让我知道

+0

我认为变量可能是字符串,并仍然工作?我应该如何解决这个问题? – AKor 2011-02-04 07:49:09

1

试试这个:

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

更新您的代码,以便:

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

,然后再试一次。

0

你能尝试:

var fieldId = manF.val(); 

mandatoryField($("element_1")); 
1

的代码块都应该工作的选择是否通过作为一个参数,或者$直接提供的文字相同不管。此外,代替if..else的,你可以做

function mandatoryField(manF) { 
    var fieldId = $(manF).val(); 
    return fieldId != ""; 
} 
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'))"/>