标签: drupal-ajax

使用FormStateInterface :: getTriggeringElement()发出"two dimentionnal'添加另一个项'"的问题

我正在学习drupal 8.我想创建一个包含'two dimensionnal''添加另一个项目'表单的页面.我的代码几乎运行良好,但是当我向房子添加房间时我有一个奇怪的行为(我的调试日志中有一个来自FormStateInterface :: getTriggeringElement()的奇怪值,请参见底部的代码和日志)

第一:我有两个结构,房子和房间.用户可以创建一些房屋,每个房子,他可以创建一些房间:

在此输入图像描述

当我添加一些房子,表格工作正常:

在此输入图像描述

当我将一些房间添加到最后一个房子时,表格也可以正常工作:

在此输入图像描述

但是,当我向任何"没有最后"的房子添加一些房间时,表格不能正常工作(在屏幕截图中,我点击了一次"阻止房屋"中的"添加房间",标签为"房子1"成了"房子2"(?!),点击添加5个房间(?!):

在此输入图像描述

这里是我的代码和一个奇怪的调试日志,我不解释为什么我得到这个值(来自room_addMoreSubmit回调中的getTriggeringElement(),这是我认为的问题)

<?php

namespace Drupal\projet\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;

class HouseForm extends FormBase {

  public function getFormId(){
    return 'custom_rooms_form';
  }

  function buildForm(array $form, FormStateInterface $form_state) {



    $house_count = $form_state->get('house_count');

    if (is_null($house_count)) {
      $house_count = 1;
      $form_state->set('house_count', $house_count);
    }

    $form['house'] = array(
        //'#tree' => TRUE,
        '#prefix' => '<div id="house-replace">',
        '#suffix' => '</div>'
    );

    for ($house_delta = 0; $house_delta < $house_count; $house_delta++) {
      if (!isset($form['house'][$house_delta])) {

        $room_count[$house_delta] = $form_state->get('room_count_'.$house_delta);

        if (is_null($room_count[$house_delta])) {
          $room_count[$house_delta] = …
Run Code Online (Sandbox Code Playgroud)

drupal-ajax drupal-forms drupal-8 programmatically-created

5
推荐指数
1
解决办法
187
查看次数

在drupal 7中ajax回调表单之前检查一个条件

我在文本字段上编写了ajax回调,并在模糊事件上调用它.

但是在它进行ajax回调之前,我想检查textfield不为空的条件.

所以我想,如果textfield不为空,则调用ajax回调,否则不应该调用它.

提前致谢

form_example是我的模块名称

表格控制

$form['price_form']['item'] = array(
    '#type' => 'textfield',
    '#title' => 'Item Name?',
    '#size' => 10,
    '#maxlength' => 25,
    '#id' => 'nameId',
    '#required' => TRUE,
    '#ajax' => array(
        // #ajax has two required keys: callback and wrapper.
        // 'callback' is a function that will be called when this element changes.
        'callback' => 'form_example_simplest_callback',
        'wrapper' => 'listDiv',
        'effect' => 'fade',
    ),
    '#autocomplete_path' => 'examples/form_example/item_name_autocomplete_callback',
);
Run Code Online (Sandbox Code Playgroud)

JS代码

(function($){
    $(document).ready(function(){
        alert('Hi, Javascript successfully attached');

        Drupal.behaviors.form_example = {
            attach: function (context, …
Run Code Online (Sandbox Code Playgroud)

drupal drupal-7 drupal-ajax

1
推荐指数
1
解决办法
3991
查看次数

为什么我应该使用Drupal的Form API和Ajax框架而不是仅仅通过调用node_save()实现我自己的解决方案?

我希望用户能够通过AJAX提交节点和评论.我还想对节点和注释表单做一些相当广泛的自定义.

我花时间浏览了Drupal 7的Form API和Ajax框架的文档和代码示例,但我发现它非常复杂.因此,我只想在HTML中创建自己的表单,并使用我自己的JavaScript代码通过Ajax提交它.我还将设置一个特定的URL来处理这些Ajax请求,这些URL将最终调用node_save()comment_save()在适当的时候调用.

与通过Form API和Ajax框架相比,这样做有什么缺点?我不是在为社区做贡献而创建模块.一切都只适用于我自己的网站.

drupal drupal-7 drupal-ajax drupal-forms

0
推荐指数
1
解决办法
533
查看次数