diff --git a/lib/formslib.php b/lib/formslib.php index 53d8d3f110e..03d3260ad80 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -129,11 +129,13 @@ class moodleform { /** * To autofocus on first form element or first element with error. * + * @param string $name if this is set then the focus is forced to a field with this name + * * @return string javascript to select form element with first error or * first element if no errors. Use this as a parameter * when calling print_header */ - function focus(){ + function focus($name=NULL){ $form =& $this->_form; $elkeys=array_keys($form->_elementIndex); if (isset($form->_errors) && 0 != count($form->_errors)){ @@ -142,10 +144,12 @@ class moodleform { } $names=null; while (!$names){ - $el = array_shift($elkeys); - $names = $form->_getElNamesRecursive($el); + $el = array_shift($elkeys); + $names = $form->_getElNamesRecursive($el); + } + if (empty($name)) { + $name=array_shift($names); } - $name=array_shift($names); $focus='forms[\''.$this->_form->getAttribute('id').'\'].elements[\''.$name.'\']'; return $focus; } diff --git a/mod/forum/post.php b/mod/forum/post.php index 845057dd7ca..a17f6f17b85 100644 --- a/mod/forum/post.php +++ b/mod/forum/post.php @@ -654,16 +654,19 @@ // Show the discussion name in the breadcrumbs. $strdiscussionname = format_string($discussion->name).':'; } + + $forcefocus = empty($reply) ? NULL : 'message'; + if ($course->id != SITEID) { print_header("$course->shortname: $strdiscussionname ". format_string($toppost->subject), $course->fullname, "id\">$course->shortname -> - $navmiddle $navtail", $mform_post->focus(), "", true, "", navmenu($course, $cm)); + $navmiddle $navtail", $mform_post->focus($forcefocus), "", true, "", navmenu($course, $cm)); } else { print_header("$course->shortname: $strdiscussionname ". format_string($toppost->subject), $course->fullname, - "$navmiddle $navtail", $mform_post->focus(), "", true, "", navmenu($course, $cm)); + "$navmiddle $navtail", $mform_post->focus($forcefocus), "", true, "", navmenu($course, $cm)); }