Es gibt Probleme mit allen hier angegebenen Implementierungen. Einige funktionieren nicht richtig mit Textbereichen und Übermittlungsschaltflächen, die meisten erlauben es Ihnen nicht, die Umschalttaste zu verwenden, um rückwärts zu gehen, keiner von ihnen verwendet Tabindexe, wenn Sie sie haben, und keiner von ihnen wickelt sich vom letzten zum ersten oder dem ersten um bis zum letzten.
Verwenden Sie den folgenden Code, damit sich die [Eingabetaste] wie die [Tab] -Taste verhält, aber dennoch ordnungsgemäß mit Textbereichen und Senden-Schaltflächen funktioniert. Darüber hinaus können Sie mit diesem Code die Umschalttaste verwenden, um rückwärts zu gehen, und das Tabbing wird von vorne nach hinten und von hinten nach vorne gewickelt.
Quellcode: https://github.com/mikbe/SaneEnterKey
CoffeeScript
mbsd_sane_enter_key = ->
input_types = "input, select, button, textarea"
$("body").on "keydown", input_types, (e) ->
enter_key = 13
tab_key = 9
if e.keyCode in [tab_key, enter_key]
self = $(this)
# some controls should just press enter when pressing enter
if e.keyCode == enter_key and (self.prop('type') in ["submit", "textarea"])
return true
form = self.parents('form:eq(0)')
# Sort by tab indexes if they exist
tab_index = parseInt(self.attr('tabindex'))
if tab_index
input_array = form.find("[tabindex]").filter(':visible').sort((a,b) ->
parseInt($(a).attr('tabindex')) - parseInt($(b).attr('tabindex'))
)
else
input_array = form.find(input_types).filter(':visible')
# reverse the direction if using shift
move_direction = if e.shiftKey then -1 else 1
new_index = input_array.index(this) + move_direction
# wrap around the controls
if new_index == input_array.length
new_index = 0
else if new_index == -1
new_index = input_array.length - 1
move_to = input_array.eq(new_index)
move_to.focus()
move_to.select()
false
$(window).on 'ready page:load', ->
mbsd_sane_enter_key()
JavaScript
var mbsd_sane_enter_key = function() {
var input_types;
input_types = "input, select, button, textarea";
return $("body").on("keydown", input_types, function(e) {
var enter_key, form, input_array, move_direction, move_to, new_index, self, tab_index, tab_key;
enter_key = 13;
tab_key = 9;
if (e.keyCode === tab_key || e.keyCode === enter_key) {
self = $(this);
if (e.keyCode === enter_key && (self.prop('type') === "submit" || self.prop('type') === "textarea")) {
return true;
}
form = self.parents('form:eq(0)');
tab_index = parseInt(self.attr('tabindex'));
if (tab_index) {
input_array = form.find("[tabindex]").filter(':visible').sort(function(a, b) {
return parseInt($(a).attr('tabindex')) - parseInt($(b).attr('tabindex'));
});
} else {
input_array = form.find(input_types).filter(':visible');
}
move_direction = e.shiftKey ? -1 : 1;
new_index = input_array.index(this) + move_direction;
if (new_index === input_array.length) {
new_index = 0;
} else if (new_index === -1) {
new_index = input_array.length - 1;
}
move_to = input_array.eq(new_index);
move_to.focus();
move_to.select();
return false;
}
});
};
$(window).on('ready page:load', function() {
mbsd_sane_enter_key();
}
textarea
in der ersten Zeile aus dem Selektor zu entfernen . In einem Textbereich möchten Sie mit der Eingabetaste eine neue Zeile beginnen können.