Search code examples
javascriptjqueryjqgridtimepicker

Unable to add image in datepicker


I am using .timepicker inside .jqGrid with filterToolbar. I want to add an image next to filter bar where the user should see a time when they click an image.

If I just use $(element).timepicker(); then I see the time when I click on filter bar but When I do following, timepicker is not working at all.

$(element).timepicker({
                showOn: "button",
                buttonImage: "https://jqueryui.com/resources/demos/datepicker/images/calendar.gif",
                buttonImageOnly: true,
          });

The same options work with datepicker. What am I missing here? Is this due to jquery.timepicker.js version?

Working Demo

$(function() {
  "use strict";

  $("#grid").jqGrid({
    colModel: [{
      name: "StartRunTime",
      label: "Start Run Time",
      align: "center",
      sorttype: "time",
      formatter: "time",
      searchoptions: {
        dataInit: function(element) {
          $(element).timepicker();
        }
      }
    }],
    data: [{
      StartRunTime: "12:00"
    }],
   
    caption: ".jqGrid Test"
  }).jqGrid('filterToolbar', {
    autoSearch: true
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.14.1/jquery.jqgrid.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.14.1/css/ui.jqgrid.min.css" rel="stylesheet" />
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.css">

<table id="grid"></table>

Not Working Demo

$(function() {
  "use strict";

  $("#grid").jqGrid({
    colModel: [{
      name: "StartRunTime",
      label: "Start Run Time",
      align: "center",
      sorttype: "time",
      formatter: "time",
      searchoptions: {
        dataInit: function(element) {
          $(element).timepicker({
           		showOn: "button",
          		buttonImage: "https://jqueryui.com/resources/demos/datepicker/images/calendar.gif",
            	buttonImageOnly: true,
          });
        }
      }
    }],
    data: [{
      StartRunTime: "12:00"
    }],
   
    caption: ".jqGrid Test"
  }).jqGrid('filterToolbar', {
    autoSearch: true
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.14.1/jquery.jqgrid.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.14.1/css/ui.jqgrid.min.css" rel="stylesheet" />
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.css">

<table id="grid"></table>


Solution

  • thats not valid option, but you can insert image and listener like this

    $(document).on("click", ".showCalendar", function(){
      $("#gs_grid_StartRunTime").timepicker('show');
    });
    $('#gs_grid_StartRunTime').parent()
      .after('<td><img class="showCalendar" src="https://jqueryui.com/resources/demos/datepicker/images/calendar.gif"></td>');
    

    Demo:

    $(function() {
      "use strict";
    
      $("#grid").jqGrid({
        colModel: [{
          name: "StartRunTime",
          label: "Start Run Time",
          align: "center",
          sorttype: "time",
          formatter: "time",
          searchoptions: {
            dataInit: function(element) {
              $(element).timepicker();
            }
          }
        },
        {
    					label: "Concept Name",
    					name: "ConceptName",
    					key: true,
    					width: 100,
    					align: "center"
    				}],
        data: [{
          StartRunTime: "12:00",
          ConceptName: "ABC"
        }],
    
        caption: ".jqGrid Test"
      }).jqGrid('filterToolbar', {
        autoSearch: true
      });
      $(document).on("click", ".showCalendar", function(){
      	$("#gs_grid_StartRunTime").timepicker('show');
      });
      $('#gs_grid_StartRunTime').parent().after('<td><img class="showCalendar" src="https://jqueryui.com/resources/demos/datepicker/images/calendar.gif"></td>');
      
    });
    .showCalendar {
    	margin: 0px 2px;
    	cursor: pointer;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.14.1/jquery.jqgrid.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.14.1/css/ui.jqgrid.min.css" rel="stylesheet" />
    <link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.min.css" rel="stylesheet" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.css">
    
    <table id="grid"></table>