Estoy tratando de activar el evento de cambio de propertychange en un campo de input para un marcador (el campo es el campo de búsqueda de OpenGrok).
El controlador para ese campo se define así (esta es la fuente OpenGrok desminificada):
function(i) { var h = true; if (i.type == "propertychange") { h = i.originalEvent.propertyName.toLowerCase() == "value" } if (h) { if (d(this).data("timeout")) { clearTimeout(d(this).data("timeout")) } d(this).data("timeout", setTimeout(function() { f._applySearchTermFilter() }, f.config.searchTimeout)) } }Lo intenté (sí, el campo de texto no tiene nombre ni identificación, solo un atributo de marcador de posición...)
$('input[placeholder="Click here to select project(s)"]') .focus() .val('MY-SEARCH-TEXT') .trigger("propertychange") pero eso falla porque el controlador intenta acceder a event.originalEvent , que jQuery no establece. ¿Puedo falsificar de alguna manera un evento que tenga esta propiedad?
Tal vez, alternativamente, sería posible prescindir de un evento y llamar a _applySearchTermFilter() directamente, pero tampoco sé cómo hacerlo, ya que todas estas funciones están dentro de un IIFE anónimo (y f=this ). ¿Esta función está expuesta a través de window de alguna manera?
Lo encontré, en realidad es bastante simple cuando uno conoce jQuery mejor:
$('input[placeholder="Click here to select project(s)"]') .focus() .val('MY-SEARCH-TEXT') .trigger($.Event('propertychange', {originalEvent: {propertyName: "value"}}));