含まれるライブラリ
@Scripts.Render("~/Scripts/jquery-ui-1.11.4.min.js")
@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")
@Scripts.Render("~/Scripts/jquery.validate.js")
私の検証は、ボタンAdd
がクリックされたときにのみアクティブになります。
$('#form1').validate({
rules: {
PROGRAM: {
required: true,
maxlength:20
},
UNIT:"required",
IS_ACTIVE:"required"
},
messages: {
PROGRAM: {
required: "Program Code is required.",
maxlength: "Program code cannot be over 20 characters long"
},
UNIT: {
required: "Unit code is required. Please select one."
},
IS_ACTIVE:{
required:"Is it active?"
}
},
errorElement: 'div',
errorLabelContainer: 'validationErrDisplay'
});
$('#programUnitInquiry').validate().cancelSubmit = false;
上記のコードとイベント ハンドラー (Add
ボタンのハンドラーを含む) は、 にラップされ$(document).ready()
ます。
ではform1
、PROGRAM
はテキスト ボックスで、残りはドロップダウン リストです。UNIT
ドロップダウン リストをクリックすると、ランタイム エラーがスローされます。エラーは/Scripts/jquery.validate.js
、バージョン 1.10.0 のファイルの 1234 行目から発生します。
if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {
$.each({
focus: 'focusin',
blur: 'focusout'
}, function( original, fix ){
$.event.special[fix] = {
setup:function() {
this.addEventListener( original, handler, true );
},
teardown:function() {
this.removeEventListener( original, handler, true );
},
handler: function(e) {
var args = arguments;
args[0] = $.event.fix(e);
args[0].type = fix;
return $.event.handle.apply(this, args);
}
};
function handler(e) {
e = $.event.fix(e);
e.type = fix;
return $.event.handle.call(this, e); // <-- error
}
});
}
エラーメッセージ:
0x800a138f - JavaScript ランタイム エラー: 未定義または null 参照のプロパティ 'call' を取得できません
UNIT
レンダリング後のドロップダウン リストの HTML:
<select name="UNIT" id="UNIT" data-val-required="The Unit Code field is required." data-val="true">
<option value="">-- Select a Unit --</option>
<!-- bunch of options retrieved from database -->
</select>