datalist_orig.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. /*
  2. * Selects con datalist
  3. */
  4. var click_in_process = false;
  5. /*$('.datalist-text ul li').mousedown(function() {
  6. click_in_process = true;
  7. });
  8. $('.datalist-text ul li').mouseup(function() {
  9. click_in_process = false;
  10. var elementRoot = $(this).parents('.datalist');
  11. elementRoot.find('.datalist-input').focus();
  12. });*/
  13. $('.datalist-text .datalist-input').on('focusin', function(){
  14. var elementRoot = $(this).parents('.datalist');
  15. elementRoot.find(".icono").show();
  16. elementRoot.find("ul").show();
  17. elementRoot.find(".datalist-input").trigger("keyup");
  18. });
  19. //$('.datalist-input').click(function(){
  20. $(document).on('click', '.datalist-input',function(){
  21. var elementRoot = $(this).parent();
  22. limpiaInput({"data":{"padre":elementRoot}});
  23. if(!elementRoot.hasClass("disabled")){
  24. elementRoot.find('ul').show();
  25. elementRoot.find('.datalist-input').focus();
  26. elementRoot.find('ul').show();
  27. elementRoot.find('.icono').removeClass('ing-buscar').addClass('ing-cancelar iconoAzul pointer');
  28. elementRoot.find('.icono').on('click',{"padre":elementRoot}, limpiaInput);
  29. elementRoot.find('.icono').on('click',{"padre":elementRoot},ocultaList);
  30. }
  31. });
  32. function ocultaList(e){
  33. (e.data.padre).find('.icono').removeClass('ing-cancelar iconoAzul pointer').addClass('ing-buscar');
  34. (e.data.padre).find('ul').hide();
  35. /*$('.datalist .icono').removeClass('ing-cancelar iconoAzul pointer').addClass('ing-buscar');
  36. $('.datalist ul').hide();*/
  37. }
  38. //usar class="selected" para marcar seleccioando por default
  39. $(function() {
  40. $.each($(".datalist").find('ul li:not(.not-selectable)'), function(){
  41. if($(this).hasClass("selected")){
  42. var elementRoot = $(this).parents('.datalist');
  43. elementRoot.find('.datalist-input').text($(this).html().replace(/[\t\n]+/g,' ').trim());
  44. var cid = $(this).data('id');
  45. elementRoot.find("input[type=hidden]").val(cid);
  46. }
  47. });
  48. });
  49. $(document).on('click', '.datalist-select > ul li:not(.not-selectable)' ,function(){
  50. var elementRoot = $(this).parents('.datalist');
  51. elementRoot.find('.datalist-input').text($(this).html().replace(/[\t\n]+/g,' ').trim());
  52. //$(this).parent('ul').siblings('input[type="text"]').blur();
  53. ocultaList({"data":{"padre":elementRoot}});
  54. var cid = $(this).data('id');
  55. elementRoot.find("input[type=hidden]").val(cid);
  56. elementRoot.find("li").removeClass("selected");
  57. $(this).addClass("selected");
  58. elementRoot.removeClass("datalist-invalid");
  59. });
  60. $('.modal').on('hide.bs.modal', function (e) {
  61. $('.datalist .icono').removeClass('ing-cancelar iconoAzul pointer').addClass('ing-buscar');
  62. $('.datalist ul').hide();
  63. });
  64. function setDatalist(selector, value=-1){
  65. var elementRoot = $(selector).parents('.datalist');
  66. $.each(elementRoot.find('ul li:not(.not-selectable)'), function(){
  67. if($(this).data("id") == value){
  68. elementRoot.find('.datalist-input').text($(this).html().replace(/[\t\n]+/g,' ').trim());
  69. $(selector).val(value);
  70. elementRoot.find("li").removeClass("selected");
  71. $(this).addClass("selected");
  72. }
  73. });
  74. }
  75. function setDatalistFirst(selector){
  76. var index=1;
  77. var elementRoot = $(selector).parents('.datalist');
  78. var num = elementRoot.find('ul li:not(.not-selectable)').length;
  79. if(index <= num){
  80. while(elementRoot.find('ul li:nth-child('+index+')').hasClass("not-selectable") && index <= num){
  81. index++;
  82. }
  83. var element = elementRoot.find('ul li:nth-child('+index+')');
  84. elementRoot.find('.datalist-input').text(element.html().replace(/[\t\n]+/g,' ').trim());
  85. $(selector).val(element.data("id"));
  86. elementRoot.find("li").removeClass("selected");
  87. element.addClass("selected");
  88. }
  89. }
  90. function disableDatalist(selector, disabled=true){
  91. var elementRoot = $(selector).parents('.datalist');
  92. if(disabled){
  93. elementRoot.addClass("disabled");
  94. ocultaList({"data":{"padre":elementRoot}});
  95. }else
  96. elementRoot.removeClass("disabled");
  97. }
  98. function invalidDatalist(selector, invalid=true){
  99. var elementRoot = $(selector).parents('.datalist');
  100. if(invalid){
  101. elementRoot.addClass("datalist-invalid");
  102. }else
  103. elementRoot.removeClass("datalist-invalid");
  104. }
  105. function buscaDatalist(selector, valor){
  106. selector.find('ul li').each(function(){
  107. var elem = $(this);
  108. if ($(this).parent().is('li'))
  109. elem = $(this).parent();
  110. if (!$(this).html().toUpperCase().includes(valor.toUpperCase())){
  111. $(elem).hide();
  112. selector.find('.datalist-input').val("");
  113. selector.find("input[type=hidden]").val("");
  114. }else
  115. $(elem).show();
  116. });
  117. }
  118. function getDatalistText(selector, valor){
  119. var elementRoot = $(selector).parents('.datalist');
  120. var text ="";
  121. $.each(elementRoot.find('ul li:not(.not-selectable)'), function(){
  122. if($(this).data("id") == valor){
  123. text = $(this).html();
  124. }
  125. });
  126. return text;
  127. }
  128. //---
  129. $('.datalist-text .datalist-input').keyup(function(){
  130. var elementRoot = $(this).parents('.datalist');
  131. var input = $(this);
  132. elementRoot.find('ul li').each(function(){
  133. var elem = $(this);
  134. if ($(this).parent().is('li'))
  135. elem = $(this).parent();
  136. if (!$(this).html().toUpperCase().includes(input.val().toUpperCase()))
  137. $(elem).hide();
  138. else
  139. $(elem).show();
  140. });
  141. });
  142. /*
  143. $('.datalist-text input').blur(function() {
  144. var elementRoot = $(this).parents('.datalist');
  145. console.log("Click? "+click_in_process);
  146. if(!click_in_process) {
  147. buscaDatalist(elementRoot, elementRoot.find('.datalist-input').val());
  148. elementRoot.find('.icono').removeClass('ing-cancelar iconoAzul pointer').addClass('ing-buscar');
  149. elementRoot.find('ul').children('li').show();
  150. elementRoot.find('ul').hide();
  151. }
  152. click_in_process = false;
  153. });
  154. */
  155. $('.datalist-text > ul li:not(.not-selectable)').click(function(){
  156. console.log("Li click!"+$(this).html());
  157. var elementRoot = $(this).parents('.datalist');
  158. elementRoot.find('.datalist-input').val($(this).html().replace(/[\t\n]+/g,' ').trim());
  159. //$(this).parent('ul').siblings('input[type="text"]').blur();
  160. var cid = $(this).data('id');
  161. elementRoot.find("input[type=hidden]").val(cid);
  162. elementRoot.find("li").removeClass("selected");
  163. $(this).addClass("selected");
  164. click_in_process = true;
  165. //elementRoot.find('.datalist-input').blur();
  166. ocultaList({"data":{"padre":elementRoot}});
  167. });
  168. $('.datalist-text .datalist-input').click(function(){
  169. var elementRoot = $(this).parents('.datalist');
  170. limpiaInput({"data":{"padre":elementRoot}});
  171. elementRoot.find('ul').show();
  172. elementRoot.find('input').focus();
  173. elementRoot.find('ul').show();
  174. elementRoot.find('.icono').removeClass('ing-buscar').addClass('ing-cancelar iconoAzul pointer');
  175. elementRoot.find('.icono').on('click',{"padre":elementRoot}, limpiaInput);
  176. });
  177. function limpiaInput(e) {
  178. (e.data.padre).find('.datalist-input').val('');
  179. (e.data.padre).find('.datalist-input').parent().children('ul').children('li').show();
  180. (e.data.padre).find('li:first').focus();
  181. (e.data.padre).find('.datalist-input').focus();
  182. }