ASP.NET MVC Ajax - Est-il possible d'exécuter un -GENERATED- lien Ajax avec l'entrée du clavier?
-
05-09-2019 - |
Question
Quelqu'un est-il capable de -execute- un Ajax.ActionLink généré lorsqu'un utilisateur appuie sur une touche du clavier? (Ceci est nécessaire pour l'accessibilité)
NOTE: J'utilise les bibliothèques ASP.NET MVC + Microsoft Js (... Ajax.js / ... MvcAjax.js) + jQuery
Javascript pour capturer keypress (IE + Firefox)
$(document).keypress(function(event) {
if(event.keyCode == 27) {
//execution here
var a = document.getElementById('linkid');
}
});
HTML généré par ASP.NET MVC ( Ajax.ActionLink () )
<a id="linkid" href="/controller/action" onclick="
Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event),
{ insertionMode: Sys.Mvc.InsertionMode.replace,
updateTargetId: 'SomeDivId' });
">LinkText</a>
Ce qui suit est pas ce que je cherche, cela ne fonctionne pas!
$(document).keypress(function(event) {
if(event.keyCode == 27) {
var a = document.getElementById('linkid');
a.onclick(); //doesn't exist in Firefox
a.click(); //doesn't "work" in Firefox (reference to "this" [a] is needed .NET MVC javascript)
a["onclick"](); //same as .onclick()
a["click"](); //same as .click()
//or even:
a.onclick.apply(a); //doesn't exist in Firefox
a.click.apply(a); //Somehow keeps "this" reference, but throws Sys.ArgumentUndefinedException
}
});
La solution
Avez-vous essayé d'utiliser le mécanisme de déclenchement de jQuery?
$(document).keypress( function(e) {
if (e.keyCode == 27) {
$(this).trigger('click');
}
}
A défaut, vous pouvez simplement invoquer le href, qui fera un postback complet, mais devrait accomplir l'action souhaitée si l'action est écrit pour gérer à la fois AJAX et les demandes non-AJAX.
$(document).keypress( function(e) {
if (e.keyCode == 27) {
location.href = $(this).attr('href');
}
}
Autres conseils
S'il vous plaît Essayez ceci:
var a = document.getElementById('linkid');
$(a).trigger('click');