ฉันได้อ่านคำตอบทั้งหมดของคำถามนี้แล้วและดูเหมือนว่าไม่มีวิธีแก้ไขใด ๆ
นอกจากนี้ฉันยังได้รับความรู้สึกที่ทำให้การกดปุ่มด้วยตัวอักษรพิเศษไม่ทำงานเลย บางคนสามารถยืนยันได้ว่าใครเป็นผู้ทำสิ่งนี้
ฉันได้อ่านคำตอบทั้งหมดของคำถามนี้แล้วและดูเหมือนว่าไม่มีวิธีแก้ไขใด ๆ
นอกจากนี้ฉันยังได้รับความรู้สึกที่ทำให้การกดปุ่มด้วยตัวอักษรพิเศษไม่ทำงานเลย บางคนสามารถยืนยันได้ว่าใครเป็นผู้ทำสิ่งนี้
คำตอบ:
หากคุณต้องการทริกเกอร์เหตุการณ์ keypress หรือ keydown สิ่งที่คุณต้องทำคือ:
var e = jQuery.Event("keydown");
e.which = 50; // # Some key code value
$("input").trigger(e);
กระชับขึ้นเล็กน้อยในขณะนี้ด้วย jQuery 1.6+ :
var e = jQuery.Event( 'keydown', { which: $.ui.keyCode.ENTER } );
$('input').trigger(e);
(หากคุณไม่ได้ใช้ jQuery UI ให้ย่อยรหัสคีย์ที่เหมาะสมแทน)
.trigger(jQuery.Event('name', props))
อย่างปกติ ดูตัวอย่างjsfiddle.net/9ggmrbpd/1 - คุณสมบัติของเหตุการณ์ที่ถูกทริกเกอร์จะถูกส่งผ่านตามที่เป็นอยู่ รหัสที่มา: github.com/jquery/jquery/blob/master/src/event.js#L739
คำตอบที่แท้จริงต้องรวม keyCode:
var e = jQuery.Event("keydown");
e.which = 50; // # Some key code value
e.keyCode = 50
$("input").trigger(e);
แม้ว่าเว็บไซต์ของ jQuery จะบอกว่าสิ่งใดและรหัสหลักเป็นแบบปกติ แต่ก็เข้าใจผิดอย่างมาก เป็นการปลอดภัยที่สุดที่จะทำการตรวจสอบข้ามเบราว์เซอร์มาตรฐานสำหรับ e.which และ e.keyCode และในกรณีนี้ให้กำหนดทั้งสองอย่าง
e.keyCode = e.which = 50;
ในบรรทัดเดียวจะดีกว่า :)
keyCode
ไม่ได้ผล ต้องตั้งค่าให้ทั้งสองทำงาน
หากคุณใช้ jQuery UI ด้วยคุณสามารถทำสิ่งนี้ได้:
var e = jQuery.Event("keypress");
e.keyCode = $.ui.keyCode.ENTER;
$("input").trigger(e);
ฉันทำให้มันทำงานกับ keyup
$("#id input").trigger('keyup');
ตกลงสำหรับฉันที่ทำงานกับสิ่งนี้ ...
var e2key = function(e) {
if (!e) return '';
var event2key = {
'96':'0', '97':'1', '98':'2', '99':'3', '100':'4', '101':'5', '102':'6', '103':'7', '104':'8', '105':'9', // Chiffres clavier num
'48':'m0', '49':'m1', '50':'m2', '51':'m3', '52':'m4', '53':'m5', '54':'m6', '55':'m7', '56':'m8', '57':'m9', // Chiffres caracteres speciaux
'65':'a', '66':'b', '67':'c', '68':'d', '69':'e', '70':'f', '71':'g', '72':'h', '73':'i', '74':'j', '75':'k', '76':'l', '77':'m', '78':'n', '79':'o', '80':'p', '81':'q', '82':'r', '83':'s', '84':'t', '85':'u', '86':'v', '87':'w', '88':'x', '89':'y', '90':'z', // Alphabet
'37':'left', '39':'right', '38':'up', '40':'down', '13':'enter', '27':'esc', '32':'space', '107':'+', '109':'-', '33':'pageUp', '34':'pageDown' // KEYCODES
};
return event2key[(e.which || e.keyCode)];
};
var page5Key = function(e, customKey) {
if (e) e.preventDefault();
switch(e2key(customKey || e)) {
case 'left': /*...*/ break;
case 'right': /*...*/ break;
}
};
$(document).bind('keyup', page5Key);
$(document).trigger('keyup', [{preventDefault:function(){},keyCode:37}]);
ในกรณีที่คุณต้องคำนึงถึงเคอร์เซอร์ปัจจุบันและการเลือกข้อความ ...
สิ่งนี้ไม่ได้ผลสำหรับฉันสำหรับแอป AngularJS บน Chrome เมื่อนาเดียชี้ให้เห็นในความคิดเห็นดั้งเดิมตัวละครจะไม่ปรากฏให้เห็นในฟิลด์อินพุต (อย่างน้อยนั่นคือประสบการณ์ของฉัน) นอกจากนี้โซลูชันก่อนหน้านี้จะไม่คำนึงถึงการเลือกข้อความปัจจุบันในฟิลด์อินพุต ผมใช้ที่ยอดเยี่ยมห้องสมุดjQuery เลือก
ฉันมีปุ่มกดตัวเลขบนหน้าจอที่กำหนดเองซึ่งเติมข้อมูลในช่องป้อนข้อมูลหลายช่อง ฉันต้อง ...
เบลอให้บันทึกการเลือกข้อความปัจจุบัน (เริ่มและหยุด)
var pos = element.selection('getPos')
lastFocus.pos = { start: pos.start, end: pos.end}
เมื่อกดปุ่มบนปุ่มกดของฉัน:
lastFocus.element.selection( 'setPos', lastFocus.pos)
lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'})
คุณต้องการที่จะทำในบรรทัดเดียวที่คุณสามารถใช้
$("input").trigger(jQuery.Event('keydown', { which: '1'.charCodeAt(0) }));
console.log( String.fromCharCode(event.charCode) );
ไม่จำเป็นต้องแมปตัวละครฉันเดา
สามารถทำได้เช่นเดียวกับเอกสารนี้
$('input').trigger("keydown", {which: 50});