Reputation: 985
I have my form as below
<div id="new_image" title="Add Image">
<form id="new_image_form" action="/reg_new_img" method="POST" enctype="multipart/form-data">
<table width="0" border="0" cellspacing="0" cellpadding="6" class="table100">
<span class="astrix"></span>
<tr>
<td class="td30">Description of the Image:</td>
<td>
<input name="desc" type="text" value="" />
</td>
</tr>
<tr>
<td></td>
<td>
<input id="atag" type="hidden" name="atag" value="">
</textarea>
</td>
</tr>
<tr>
<tr>
<td>Files / Image:
<p class="text5">X-ray / Site / Document / Agreement etc.</p>
</td>
<td>
<input name="image" type="file">
</td>
</tr>
</table>
</form>
</div>
the script is as below.
$(document).ready(function () {
$("#new_image").dialog({
height: $("#new_image").height() + 150,
width: $("#new_image").width() - 450,
modal: true,
autoOpen: false,
show: {
effect: "fade",
duration: 200
},
hide: {
effect: "fade",
duration: 200
},
buttons: {
"Submit": function () {
$("#new_image_form").submit();
},
"Close": function () {
$('#new_image').dialog("close");
}
}
});
$('#new_image_form').validate({
rules: {
desc: {
required: true,
minlength: 10
},
image: {
required: true,
accept: "image/*"
}
},
messages: {
image: {
required: "only Image files accepted",
accept: "Please upload only image",
},
},
submitHandler: function (form) {
$('#new_image_form').ajaxSubmit({
success: function (data) {
console.log(data);
$('#new_image').dialog("close");
$(':input', '#new_image_form')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
}
});
parse_patients();
}
});
$('#new_image').dialog("open");
});
I have this code on js fiddle
http://jsfiddle.net/rakeshpatil1983/ctL7q/
I'm getting an error when i click submit when I actually put image file on the chrome browser console
Uncaught TypeError: Cannot call method 'call' of undefined
I'm not able to fix this. This code seems to work in some other page.
Upvotes: 3
Views: 12722
Reputation: 3091
In your rules for #new_image_form, "accept" is not a default jQuery Validator default rule. You must either use one of these default rules: Jquery Validate - List of Classes or define your own custom rule like such: jQuery Validate Plugin - How to create a simple custom rule?
EDIT: from comments below: there is a rule called accept that is part of the jQuery Validate plugin package. You simply have to include the additional-methods file in order to use it.
Upvotes: 11
Reputation: 422
//Add New Validator Rule
jQuery.validator.addMethod("accept", function(value, element, param)
{
return value.match(new RegExp("^" + param + "$"));
});
I had similar problem, which 'accept' rule was forgot to declared in the beginning.
then 'Uncaught TypeError: Cannot call method 'call' of undefined' disappeared.
Upvotes: -1