0

Est-ce que quelqu'un peut -exécuter- un Ajax.ActionLink généré lorsqu'un utilisateur appuie sur une touche du clavier? (Ceci est nécessaire pour l'accessibilité)ASP.NET MVC Ajax - Est-il possible d'exécuter un lien -GENERATED-Ajax avec une entrée au clavier?

NOTE: J'utilise les bibliothèques ASP.NET MVC + Microsoft Js (... Ajax.js/... MvcAjax.js) + jQuery

Javascript pour capturer pression de touche (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 n'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 
    } 
});  

Répondre

2

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 une publication complète, mais doit 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'); 
    } 
} 
+0

Mon Dieu, je n'ai pas essayé la partie jQuery. Je pense que je pourrais vraiment le faire fonctionner. Pour la deuxième partie: J'ai créé des gestionnaires pour les requêtes AJAX et non-AJAX, mais c'est un intranet et tout le monde (IE7) et moi (FF) devraient le faire fonctionner avec AJAX, surtout en utilisant une entrée au clavier. Je vais essayer la partie suivante de jQuery demain. – Ropstah

+0

Eh bien potverdrie, ça marche! :) – Ropstah

0

S'il vous plaît Essayez ceci:

  var a = document.getElementById('linkid'); 
     $(a).trigger('click');