如何在填写一个字段后自动填写其他表单字段?
How to automatically fill other form fields after one field is filled?
我正在使用 moodleform class 在 moodle 中创建一个表单。我在表单中有很多字段。我想做的是当用户填写第一个字段时,我想获取 he/she 输入的数据,在相关数据库 table 中搜索与该输入匹配的字段,然后填充该记录的其他字段。
请注意,用户尚未按下任何提交按钮。我一直试图找到一个获取输入数据的函数,但所有的努力都是徒劳的。我发现的是 get_data() 方法,但我什至不知道如何正确使用它。我一直在阅读 moodle 文档,但没有任何帮助。我不是编码初学者,但也不是专家。
这是一个代码片段:
class requestcourse_form extends moodleform
{
function definition()
{
global $CFG, $currentsess, $DB, $USER, $currentrecord;
$mform =& $this->_form; // Don't forget the underscore!
// Form header
$mform->addElement('header', 'mainheader','<span style="font-size:22px">'.get_string('courserequestform','block_usp_mcrs'). '</span>');
// Course Code field.
$coursecodearray = array();
$coursecodearray[0] = get_string('choosecoursecode', 'block_usp_mcrs');
$allcoursecodes = $DB->get_records_select('block_usp_mcrs_courses', 'id > 0', array(), 'id', 'id, course_code');
foreach ($allcoursecodes as $id => $coursecodeobject) {
$coursecodearray[$id] = $coursecodeobject->course_code;
}
$coursecode = $mform->addElement('select', 'coursecode', get_string('coursecode', 'block_usp_mcrs'), $coursecodearray);
$mform->addRule('coursecode', get_string('required'), 'required', null, 'client');
$mform->setType('coursecode', PARAM_RAW);
// Course Name field. TODO: Course Name to pick automatically after entering Course Code
$coursenamearray = array();
$coursenamearray[0] = get_string('choosecoursename', 'block_usp_mcrs');
$allcoursenames = $DB->get_records_select('block_usp_mcrs_courses', 'id > 0', array(), 'id', 'id, course_name');
foreach ($allcoursenames as $id => $coursenameobject) {
$coursenamearray[$id] = $coursenameobject->course_name;
}
$mform->addElement('select', 'coursename', get_string('coursename', 'block_usp_mcrs'), $coursenamearray);
$mform->addRule('coursename', get_string('required'), 'required', null, 'client');
$mform->setType('coursename', PARAM_RAW);
如有任何帮助,我们将不胜感激。
您必须使用 javascript 来实现此目的,因为 Moodle 没有以嵌套方式填充数据的功能。
在调用 mform 的地方添加 AMD 模块 js 文件。
在您呈现 mform 的文件中
$mform->render();
添加下面一行来调用你的 amd js 文件。
$PAGE->requires->js_call_amd('local_acestructure/registration', 'init');
在您的 amd js 文件中进行 httprequest / ajax 调用以根据您的 course_code select 下拉更改获取数据。
谢谢。
我正在使用 moodleform class 在 moodle 中创建一个表单。我在表单中有很多字段。我想做的是当用户填写第一个字段时,我想获取 he/she 输入的数据,在相关数据库 table 中搜索与该输入匹配的字段,然后填充该记录的其他字段。
请注意,用户尚未按下任何提交按钮。我一直试图找到一个获取输入数据的函数,但所有的努力都是徒劳的。我发现的是 get_data() 方法,但我什至不知道如何正确使用它。我一直在阅读 moodle 文档,但没有任何帮助。我不是编码初学者,但也不是专家。
这是一个代码片段:
class requestcourse_form extends moodleform
{
function definition()
{
global $CFG, $currentsess, $DB, $USER, $currentrecord;
$mform =& $this->_form; // Don't forget the underscore!
// Form header
$mform->addElement('header', 'mainheader','<span style="font-size:22px">'.get_string('courserequestform','block_usp_mcrs'). '</span>');
// Course Code field.
$coursecodearray = array();
$coursecodearray[0] = get_string('choosecoursecode', 'block_usp_mcrs');
$allcoursecodes = $DB->get_records_select('block_usp_mcrs_courses', 'id > 0', array(), 'id', 'id, course_code');
foreach ($allcoursecodes as $id => $coursecodeobject) {
$coursecodearray[$id] = $coursecodeobject->course_code;
}
$coursecode = $mform->addElement('select', 'coursecode', get_string('coursecode', 'block_usp_mcrs'), $coursecodearray);
$mform->addRule('coursecode', get_string('required'), 'required', null, 'client');
$mform->setType('coursecode', PARAM_RAW);
// Course Name field. TODO: Course Name to pick automatically after entering Course Code
$coursenamearray = array();
$coursenamearray[0] = get_string('choosecoursename', 'block_usp_mcrs');
$allcoursenames = $DB->get_records_select('block_usp_mcrs_courses', 'id > 0', array(), 'id', 'id, course_name');
foreach ($allcoursenames as $id => $coursenameobject) {
$coursenamearray[$id] = $coursenameobject->course_name;
}
$mform->addElement('select', 'coursename', get_string('coursename', 'block_usp_mcrs'), $coursenamearray);
$mform->addRule('coursename', get_string('required'), 'required', null, 'client');
$mform->setType('coursename', PARAM_RAW);
如有任何帮助,我们将不胜感激。
您必须使用 javascript 来实现此目的,因为 Moodle 没有以嵌套方式填充数据的功能。
在调用 mform 的地方添加 AMD 模块 js 文件。
在您呈现 mform 的文件中
$mform->render();
添加下面一行来调用你的 amd js 文件。
$PAGE->requires->js_call_amd('local_acestructure/registration', 'init');
在您的 amd js 文件中进行 httprequest / ajax 调用以根据您的 course_code select 下拉更改获取数据。
谢谢。