2011-02-04 43 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'))"/>