Voglio disattivare il menu contestuale predefinito quando un utente fa clic con il pulsante destro del mouse su un campo di input in modo che possa mostrare un menu contesto personalizzato. In generale, la sua piuttosto facile per disattivare il menu di scelta rapida facendo qualcosa di simile:jQuery: preventDefault() non funziona sugli eventi di input/clic?
$([whatever]).bind("click", function(e) { e.preventDefault(); });
E infatti, posso fare questo su quasi ogni elemento tranne per i campi di input in FF - Qualcuno sa perché o potrebbe indicarmi una documentazione?
Ecco il codice pertinente con cui lavoro, grazie ragazzi.
HTML:
<script type="text/javascript">
var r = new RightClickTool();
</script>
<div id="main">
<input type="text" class="listen rightClick" value="0" />
</div>
JS:
function RightClickTool(){
var _this = this;
var _items = ".rightClick";
$(document).ready(function() { _this.init(); });
this.init = function() {
_this.setListeners();
}
this.setListeners = function() {
$(_items).click(function(e) {
var webKit = !$.browser.msie && e.button == 0;
var ie = $.browser.msie && e.button == 1;
if(webKit||ie)
{
// Left mouse...do something()
} else if(e.button == 2) {
e.preventDefault();
// Right mouse...do something else();
}
});
}
} // Ends Class
EDIT:
Siamo spiacenti, dopo aver letto i commenti che mi rendo conto che avrei dovuto chiarire un paio di cose.
1) Il codice sopra funziona ... in un certo senso. Il codice è in grado di ordinare attraverso quale pulsante è stato fatto clic, ma non gli interessa che io dica e.preventDefault() e il menu di scelta rapida compaia ancora. In altre parole, se metti un avviso su e.button otterresti il tuo 1 o 0 per sinistra e 2 per destra ... ma semplicemente ride di me e mostra ancora il dannato menu predefinito!
2) Se metto il selettore jQuery su QUALSIASI altro elemento (diverso dall'input), allora tutto funzionerà, FF rispetterà la chiamata preventDefault() e il menu di scelta rapida predefinito non verrà visualizzato.
cosa dire semplicemente 'return false'? –
Inoltre, prova 'e.which' invece di' e.button'. – karim79
potrebbe essere correlato http://stackoverflow.com/questions/1489817/jquery-liveclick-firing-for-right-click – scott