2012-12-29 140 views
1

我見過噸如何選擇列表上使用jQuery驗證樣本 - 我試圖實現一個,但它只是不爲我工作。我對這個插件一般都很陌生,對於我在做什麼錯誤感到困惑不解。問題與jQuery驗證

預期的行爲是,它不應該驗證用戶是否已經離開了選擇菜單「默認」。他們必須做出選擇。

我開始接線新的驗證方法。

的Javascript

(function($) { 
    $.validator.addMethod('mustbe', function(value, element, params) { 
     var testValue = params['propertyvalue']; 
     var condition = params['condition']; 
     if ((condition == '0') && (value != testValue)) return true; 
     if ((condition == '1') && (value == testValue)) return true; 
     return false; 
    }); 
})(jQuery); 

$(document).ready(function() { 
    $("#form1").validate(); 

    $('#form1').submit(function() { 
     alert($('#form1').valid()); 
    }); 
});​ 

然後,我通過添加元數據的實際HTML隨動。

HTML

<form id="form1" action=""> 
<select id="select_list" data-val="true" 
     data-val-mustbe="You must select a value" 
     data-val-mustbe-condition="0" 
     data-val-mustbe-propertyvalue="default" 
     data-val-required="You must select a value" > 
     <option value="default">Choose...</option> 
     <option value="1">1</option> 
     <option value="2">2</option> 
</select> 
<input type="submit" id="submit" value="Submit" /> 
</form>​ 

它只是拒絕驗證。這裏是一個鏈接到一個小提琴,太:

jsFiddle

+1

什麼所有'data-val-XXX'的東西? AFAIK,jquery-validate不會對這些屬性做任何事情。你似乎期待它提取它們並將它們包含在該方法的'params'參數中。 – Barmar

回答

1

你應該告訴你正在使用ASP.NET MVC。它不會幫助,但人們會停止詢問自定義屬性名稱。

我重新設計了您的代碼以使用value default和data-val屬性。這是一個代碼示例:

$(document).ready(function() {  
    $.validator.addMethod("valueNotEquals", function(value, element, arg){ 
     return arg != value; 
    }, ""); 

    $("#form1").validate({ 
     rules: { 
      select_list : {valueNotEquals: $('#select_list').attr('data-val-mustbe-propertyvalue')}, 
     }, 
     messages: { 
      select_list : { valueNotEquals: $('#select_list').attr('data-val-required') } 
     },   
     submitHandler: function(form) { 
      alert($('#form1').valid()); 
      form.submit(); 
     } 
    }); 
}); 

編輯:

而且這裏有一個的jsfiddle例如:http://jsfiddle.net/Gajotres/ekPpS/

而這裏沒有ASP.NET MVC版本屬性:

<form id="form1" action=""> 
    <select id="select_list" name="select_list"> 
      <option value="default">Choose...</option> 
      <option value="1">1</option> 
      <option value="2">2</option> 
    </select> 
    <input type="submit" id="submit" value="Submit" /> 
</form> 

$(document).ready(function() {  
    $.validator.addMethod("valueNotEquals", function(value, element, arg){ 
     return arg != value; 
    }, ""); 

    $("#form1").validate({ 
     rules: { 
      select_list : {valueNotEquals: "default"}, 
     }, 
     messages: { 
      select_list : { valueNotEquals: "You must select a value" } 
     },   
     submitHandler: function(form) { 
      alert($('#form1').valid()); 
      form.submit(); 
     } 
    }); 
}); 
+0

對不起,我沒有意識到自定義屬性是MVC原生的。我相信這只是jQuery驗證插件的一部分。 – Ciel

+0

他們沒有,但不用擔心,給我一秒鐘,我會寫沒有他們的更新。 – Gajotres

+0

謝謝你的幫助,這使得它更清晰。我已經發布了一個後續問題的下一步,我想完成 - 它是在這裏,如果你有興趣 - http://stackoverflow.com/questions/14086074/jquery-validation-on-select-list-themed- with-jquery-ui-selectmenu-plugin – Ciel

1

簡單的方法是默認選項,使用value='',並指定select要求:

<select id="select_list" class="required"> 
+0

在我的具體情況下,我需要爲他們提供一個默認解釋。 – Ciel

+0

這有什麼問題?你可以在調用'validate()'的'message:'選項中指定它。 – Barmar

+0

因爲「必需」似乎要求它有一個值 - 我希望它不適用於特定值(我給它)。我想到了同樣的事情 - 我只是用「必需」類來裝飾它,它似乎工作 - 但事實上它實際上鎖定了它在選擇列表上的真實驗證。 – Ciel

0

因此,答案由Barmar部分正確,但沒有很好解釋。

改變我做了讓this updated fiddle工作:

添加NAME =「select_list中」 select元素本身給jquery.validate它想要尋找

改進的JavaScript調用validate :

$("#form1").validate({ 
    rules: { 
    select_list: { 
     required: true, 
     number: true 
    } 
    }, 
submitHandler: function(form) { 
    alert($('#form1').valid()); 
    form.submit(); 
} 
}); 
+0

現在這是否忽略了我已經走了並添加的「mustbe」元數據? – Ciel

+0

我對你在這裏使用'數字'的方式有點困惑。 – Ciel

+1

它確實忽略或不使用'必須'的元數據,我不確定它應該做什麼,它在沒有驗證之前沒有做任何事情......我正在回答的原始問題這就是爲什麼你使用的是不正確的驗證,你沒有正確使用validate()。 – DrCord