javascript - 根据选择元素的 onchange 事件添加新的 moodle UI 元素

标签 javascript php moodle moodle-api

我是 moodle 的新手,我总是在客户端编程。我想也许因为这个原因我错过了一些东西。我需要根据用户在组合中的选择,为用户提供不同的 UI 元素。所以我在考虑根据策略(设计模式)编写元素。从 mod_form.php 中的一个对象,我试图执行这样的事情:

$this -> _form  -> addElement('select', 'displayStrategy', get_string('displayStrategy', 'xForum'), $displayStrategy, array('onchange' => 'javascript: function loadStrategy(selVal){

$.ajax({
 type: "POST",
 url: "../mod/xForum/action/displayStrategy.php",
 data: { class: selVal }
}).done(function( msg ) { 
 console.log("Strategy was executed");
});
}; loadStrategy(this.value);') ); 

正在执行并在控制台中打印日志,但是 displayStrategy.php 中的内容从未执行,在当前 View 中添加了“加载”效果,最后一个问题是我还需要调用一个函数在编写 UI 的同一对象中(mod_form.php 中执行所有 $this -> _form -> addElement(...) 的对象)

你能帮我一把吗?如何根据策略执行这些方法?

非常感谢!

最佳答案

我的回答与 Andres Ramos 的回答类似

首先,在您的 PHP 文件中添加一个单独的 js 文件来编写您的 JS 函数。

require_js("./class-section.js"); 

在这个文件下面写上,encodeURI 也用于发送空格。

function fetchSectionsfromclassName() {
        var class= $('#id_user_create_grade').val();
        $('#id_user_create_section').load('getter.php?className=' + encodeURI(class));
}

现在上面的函数需要一个 getter.php 文件所以创建一个新的 gettter.php 文件,您将从 className 中获取部分。我在数据库中有一个表 lo_sections,它有两列“class”和“section”。 在 getter.php 中写这个

<?php
require_once("../config.php");
global $DB;

// Get the parameter
$className = $_GET['className'];
if($className) {
    $sections =  $DB->get_records('lo_sections', array('class' => $className));
    foreach ($sections as $key => $value) {
        echo "<option value=".$value->section.">" .$value->section . "</option>";
    }
}

在您要添加两个下拉菜单的 PHP 文件中写下这个 这里第一个下拉列表用于类,第二个用于像 (A, B, C) 这样的部分

$attributes =  array('onchange' => 'javascript:fetchSectionsfromclassName()');
$defaultOption = array("NA" => "NA");
$mform->addElement('select', "user_create_class", 'class', $this->options, $attributes);
$mform->addElement('select', 'user_create_section', 'Section', $defaultOption);

关于javascript - 根据选择元素的 onchange 事件添加新的 moodle UI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37418256/

相关文章:

linux - Moodle 2.5 (openSuse) cron 作业停止运行,我找不到它,或日志,Moodle 的 cron 在哪里?

php - angularjs:如何在指令中使用 if-else 条件

php - 如何获取该月某一天的下一次出现情况

php - get_records_sql 使用moodle中的内连接仅返回一个结果

javascript - ngRequired 未在表单字段上设置 $error 属性

php - json_encode 在 while 循环内不起作用

plugins - 尝试在Moodle上安装插件后出现错误500

javascript - 使用 JavaScript 事件委托(delegate)设置删除事件监听器的有效方法是什么

javascript - 在显示给用户之前验证输入值

javascript - 伪元素出现在焦点上但不在单击时出现