jQuery DatePicker with Placeholder
by Eddie Geis
HTML
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/blitzer/jquery-ui.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
<form method="post">
<p>HTML5 Date: <input type="date" placeholder="html5 date:" /></p>
<p>jQuery DatePicker: <input type="text" class="datepicker" placeholder="Start date:" /></p>
<p><input id="Button1" type="button" value="Get DatePicker Value" title="Get DatePicker Value" /></p>
<p><input type="submit" text="fire submit" /></p>
<p>Original Source for this <a target="_blank" href="http://jqfaq.com/how-to-add-some-custom-text-to-the-datepickers-text-field/">JQFaq Question</a></p>
</form>
CSS
.ui-datepicker { width:210px; }
JavaScript
// We don't want the val method to include placehoder value, so removing it here.
var $valFn = $.fn.val;
$.fn.extend({
val: function() {
var valCatch = $valFn.apply(this, arguments);
var placeholder = $(this).attr("placeholder");
// To check this val is called to set value and the val is for datePicker element
if (!arguments.length && this.hasClass('hasDatepicker')) {
if (valCatch.indexOf(placeholder) != -1) {
return valCatch.replace(placeholder, "");
}
}
return valCatch;
}
});
// Insert placeholder as prefix in the value, when user makes a change.
$(".datepicker").datepicker({
onSelect: function(arg) {
$(this).val($(this).attr("placeholder") + arg);
}
});
// Display value of datepicker
$("#Button1").click(function() {
alert('call val(): {' + $(".datepicker").val() + '}');
});
// Submit
$('form').on('submit', function() {
var $datepicker = $(".datepicker");
$datepicker.val($datepicker.val());
alert('value on submit: {' + $datepicker[0].value + '}');
return false;
});