Кнопка с поведением Drupal jQuery, конфликтующая с кнопкой AJAX "Добавить больше" в поле Неограниченного количества элементов
У меня есть форма с неограниченным количеством полей, которая создает кнопку "Добавить больше", чтобы добавить больше полей. У меня также есть отдельная пара полей. Одно из этих полей имеет значение, предварительно заполненное при запуске новой формы, другое поле - это еще одно поле с неограниченным количеством элементов с кнопкой "Добавить больше", и оно пусто при загрузке страницы. Я прикрепил функцию jQuery поведения Drupal к кнопке, которую я добавил в пользовательский модуль с помощью hook_form_alter: этот jQuery устанавливает значение второе из пары полей соответствует значению первого при нажатии пользовательской кнопки. Это работает. И кнопки "Добавить больше" для полей с неограниченным количеством элементов также работают. Однако после того, как пользовательская кнопка была нажата один раз, кнопка "Добавить больше" больше не будет создавать новое поле, и я получаю следующие ошибки в своих журналах:
Apr 25 02:56:36 lucifer drupal: https://somesite.com|1366880196|php|111.111.111.111|https://somesite.com/system/ajax|https://somesite.com/node/add/inventory-stocking-ticket|1||Warning: implode(): Invalid arguments passed in form_error() (line 1649 of /hosting/somesite/com/htdocs/cms_sandbox/includes/form.inc).
Apr 25 02:56:41 lucifer drupal: https://somesite.com|1366880201|php|111.111.111.111|https://somesite.com/system/ajax|https://somesite.com/node/add/inventory-stocking-ticket|1||Notice: Undefined index: #ajax in ajax_form_callback() (line 379 of /hosting/somesite/com/htdocs/cms_sandbox/includes/ajax.inc).
Вот мой код для пользовательской кнопки:
$form['field_ending_weight_garbage']['und']['garbage_no_change'] = array(
'#type' => 'button',
'#value' => t('No Change'),
'#attributes' => array('onclick' => 'return (false);'),
'#name' => 'garbagenochange',
);
И код для поведение:
(function ($) {
Drupal.behaviors.noChange = {
attach: function (context, settings) {
$('#edit-field-ending-weight-garbage-und-garbage-no-change').once('noChange', function() {
$('#edit-field-ending-weight-garbage-und-garbage-no-change', context).click(function () {
var a = $('#edit-field-starting-weight-garbage-und-0-value').val();
var b = $('#edit-field-ending-weight-garbage-und-0-value').val();
if (b == "")
{
$('#edit-field-ending-weight-garbage-und-0-value').val( a );
}
else
{
$('#edit-field-ending-weight-garbage-und-0-value').select();
}
return false;
});
});
}
};
}(jQuery));
Который прикрепляется в функции after_build следующим образом:
drupal_add_js(drupal_get_path('theme', 'corolla').'/js/inventoryNoChange.js');
Я использую jQuery 1.5 с помощью модуля обновления jQuery, несжатый. Что может быть причиной этого?
Редактировать: Мне удалось устранить первую ошибку, добавив пользовательскую кнопку следующим образом:
$form['field_starting_weight_garbage']['und'][0]['garbage_no_change'] = array(
'#type' => 'button',
'#value' => t('No Change'),
'#attributes' => array('onclick' => 'return (false);'),
'#limit_validation_errors' => array(),
'#name' => 'garbagenochange',
);
Таким образом, он находится на первом поле в паре, а не на втором, и он находится на $form['field_starting_weight_garbage']['und'][0]['garbage_no_change']
, а не $form['field_starting_weight_garbage']['und']['garbage_no_change']
.
Но ошибка ajax сохраняется, и "Добавить еще один" функциональность все еще нарушена. Я должен отметить, что он только выдает ошибку и выходит из строя, по-видимому, случайным образом. Я могу добавить несколько дополнительных полей с помощью кнопки "Добавить еще", но затем она ломается, выдает ошибку и не добавляет больше полей.
Я определил, что это не поведение/jQuery, которое нарушает вещи. Простое добавление пользовательской кнопки без привязки к ней поведения вызывает проблему. Все еще надеюсь, что кто-нибудь сможет пролить свет на это.
1 answers
Поэтому я выбрал другой подход, чтобы добиться того же самого. Вместо добавления кнопки с использованием свойства '#button' или '#submit' в hook_form_alter, которое вызывало конфликт, я добавил кнопку со следующим кодом:
$form['field_starting_weight_garbage']['und'][0]['value']['#prefix'] = '<div>';
$form['field_starting_weight_garbage']['und'][0]['value']['#suffix'] = '<input type="submit" value="No Change" class="form-submit" id="garbagenochange"></div>';
И скорректировал поведение Drupal для присоединения к этому элементу (id="garbagenochange").
Я до сих пор точно не знаю, что стало причиной конфликта или как его исправить, но это то, что мне нужно, поэтому я пойду по этому пути.