简体   繁体   English

在使用jQuery的文本输入上触发keydown,在事件发生后保留值

[英]Trigger keydown on text-input with jQuery, retain value after event

Using Tampermonkey on an angularjs site. 在angularjs网站上使用Tampermonkey。 I'm prepopulating an inputbox with a value whenever I open the url, but the search is triggered by typing. 每当我打开url时,我都会用一个值预填充输入框,但是搜索是通过键入触发的。 So I need a keydown-event ie "space" to trigger the search. 因此,我需要一个keydown事件(即“空格”)来触发搜索。

I've figured out how to trigger a keydown-event, but it overrides the value already in the inputbox. 我已经弄清楚了如何触发一个keydown事件,但是它会覆盖输入框中已经存在的值。 How do I retain it, while still triggering a keydown? 我如何保留它,同时仍触发按键?

(function() {
'use strict';

var herId = getParameterByName('Q');
window.setTimeout(function() {
    var el = document.querySelector('.form-control');
    el.value = herId;
}, 200);

window.setTimeout(function() {
    var e = jQuery.Event("keydown");
    e.which = 32; // # Some key code value
    $("input").val(String.fromCharCode(e.which));
    $("input").trigger(e);
}, 1600);
})();

function getParameterByName(name, url) {
   if (!url) url = window.location.href;
   name = name.replace(/[\[\]]/g, "\\$&");
   var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
   results = regex.exec(url);
   if (!results) return null;
   if (!results[2]) return '';
   return decodeURIComponent(results[2].replace(/\+/g, " "));
}

I'm using the delays because the page takes some time to load. 我使用延迟是因为页面需要一些时间来加载。

Every time the keydown event runs, the old value is cleared out and replace by the new String.fromCharCode character. 每次keydown事件运行时,都会清除旧值,并用新的String.fromCharCode字符替换。

//Try this
(function() {
'use strict';

var herId = getParameterByName('Q');
window.setTimeout(function() {
    var el = document.querySelector('.form-control');
    el.value = herId;
}, 200);

window.setTimeout(function() {
    var e = jQuery.Event("keydown");
    e.which = 32; // # Some key code value

    $("input").val($(this).val() + String.fromCharCode(e.which));
    $("input").trigger(e);
}, 1600);
})();

function getParameterByName(name, url) {
   if (!url) url = window.location.href;
   name = name.replace(/[\[\]]/g, "\\$&");
   var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
   results = regex.exec(url);
   if (!results) return null;
   if (!results[2]) return '';
   return decodeURIComponent(results[2].replace(/\+/g, " "));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM