diff --git a/django/contrib/admin/static/admin/js/change_form.js b/django/contrib/admin/static/admin/js/change_form.js index eafc6e5f14..7fc8991727 100644 --- a/django/contrib/admin/static/admin/js/change_form.js +++ b/django/contrib/admin/static/admin/js/change_form.js @@ -1,9 +1,17 @@ -(function($) { +(function() { 'use strict'; - $(document).ready(function() { - var modelName = $('#django-admin-form-add-constants').data('modelName'); - if (modelName) { - $('form#' + modelName + '_form :input:visible:enabled:first').focus(); + var inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']; + var modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName; + if (modelName) { + var form = document.getElementById(modelName + '_form'); + for (var i = 0; i < form.elements.length; i++) { + var element = form.elements[i]; + // HTMLElement.offsetParent returns null when the element is not + // rendered. + if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) { + element.focus(); + break; + } } - }); -})(django.jQuery); + } +})(); diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index fe19b40e85..21b1c9bceb 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -68,7 +68,8 @@ src="{% static 'admin/js/change_form.js' %}" {% if adminform and add %} data-model-name="{{ opts.model_name }}" - {% endif %}> + {% endif %} + async> {% endblock %}