如何在填写一个字段后自动填写其他表单字段?

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 下拉更改获取数据。

谢谢。