0

我正在使用jQuery Validation plugin並嘗試驗證兩個時間字段。我要確保,如果「全部」中選擇了一個領域,這是對其他真實和end time大於start time無法通過自定義jQuery表單下拉驗證選擇GetElementByName的值

下面是HTML:

<form id="schedule"> 
<select name='start_hour' id='start_hour'> 
    <option value='All00'>All</option> 
    <option value='0000'>00</option> 
    <option value='0100'>01</option> 
    <option value='0200'>02</option> 
    <option value='0300'>03</option>... 
</select> 
and 
<select name='end_hour' id='end_hour'> 
    <option value='All00'>All</option> 
    <option value='0000'>00</option> 
    <option value='0100'>01</option> 
    <option value='0200'>02</option> 
    <option value='0300'>03</option>... 
</select> 
</form> 

這裏是自定義規則:

jQuery.validator.addMethod( "schedule", function(value, element) { 

    var start_hour = document.getElementsByName("start_hour"); 
    var end_hour = document.getElementsByName("end_hour"); 

    alert(start_hour.value); 
    alert(end_hour.value); 
    if (start_hour.value == "All00" && end_hour.value !="All00") 
    { 
     alert('end hour all error') 
     return false; 
      } 
     else if (end_hour.value == "All00" && start_hour.value !="All00") 
    { 
     alert('start hour all error') 
     return false; 
      } 
      else if (end_hour.value <= start_hour.value){ 
       alert('end hour must be larger error') 
     return false; 
      } 

    else return true; 
    }, "Error with schedule"); 

出於某種原因alert(start_hour.value);返回「未定義」我還試圖用getElementbyID和失敗過。我對Javascript真的很陌生,所以我知道這很簡單。

JsFiddle Here

回答

2

你並不需要使用getElementsByName與jQuery 試試這個,jQuery Attribute Selector

$('select[name="start_hour"]') 

或者因爲你似乎有ID一樣的,你可以使用這個名稱而不是選擇

$('select#start_hour') 

您的驗證器方法應當建立這樣

jQuery.validator.addMethod( "schedule", function(value, element) { 
    var start_hour = $('select#start_hour'); 
    var end_hour = $('select#end_hour'); 

    alert(start_hour.val()); 
    alert(end_hour.val()); 

    if (start_hour.val() == "All00" && end_hour.val() !="All00") { 
     alert('end hour all error') 
     return false; 
    } 
    else if (end_hour.val() == "All00" && start_hour.val() !="All00") { 
     alert('start hour all error') 
     return false; 
    } 
    else if (end_hour.val() <= start_hour.val()) { 
     alert('end hour must be larger error') 
     return false; 
    } 
    else return true; 
    }, "Error with schedule"); 
+0

沒了,'VAR START_HOUR = $( '輸入[名稱= 「START_HOUR」]'); alert(start_hour.value)'仍似乎返回'undefined'請參閱http://jsfiddle.net/BandonRandon/4PrM7/ – BandonRandon 2011-05-17 21:43:36

+0

如果使用jQuery選擇器,您需要使用.val()而不是.value,但是,如果你已經在使用它,那麼還可以使用jQuery。 – RwwL 2011-05-17 21:44:12

+0

當@BrandonRandon使用jQuery時,你必須意識到你正在用選擇器而不是DOM對象返回jQuery對象。給我一秒,我會修改你的代碼,以充分利用jQuery。 – 2011-05-17 21:44:31

1

getElementsByName返回一個數組,即使只有一個結果,所以你需要指定要第一個。

var start_hour = document.getElementsByName("start_hour")[0]; 
var end_hour = document.getElementsByName("end_hour")[0]; 
0

getElementsByName(注意「S」)返回一個數組,所以你必須通過引用起始值:start_hour[0].value。不,我同意約翰,你應該明確使用jquery選擇器。

1

您還可以使用jQuery的ID選擇 '#'

下也可以工作:

var start_hour = $("#start_hour"); 
var end_hour = $("#end_hour"); 

alert(start_hour.val()); 
alert(end_hour.val());