我需要将Javascript中的值传递给我的drupal 8表单。
我已经在表单中添加了一个隐藏字段。JavaScript正在计算一个值并将其写入字段。但是,如何获取函数SubmitForm()中的值?
使用隐藏字段甚至是正确的方法吗?如果是这样,我该怎么做才能完成这项工作?
为了便于阅读,我删除了大多数代码。
FooForm.php:
class FooForm extends FormBase
{
public function getFormId()
{
return 'fooID';
}
public function buildForm(array $form, FormStateInterface $form_state)
{
//...here are lot's of elements not relevant right now
$form['myhiddenfield'] = ['#type' => 'hidden'];//adding hidden field.
$form['#attached']['library'][] = 'foo/foocalculator';
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state)
{
dpm($form_state->getValues()['myhiddenfield']);//not getting the calculated value.
}
foocalculator.js:
(function ($, Drupal) {
passToDrupal = $('#myhiddenfield');
$('#edit-submit--3').click(function (event) {
calcRoute(address, $editparcel.fieldValue().toString())
});
})(jQuery, Drupal);
function calcRoute(start, destination) {
var request = {
origin: start,
destination: destination,
};
directionsService.route(request, function (result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(result);
mydistance = result.routes[0].legs[0].distance.value;
passToDrupal.val(mydistance);//adds value to hidden field.
}
});
}
隐藏字段有点特殊,因为字段值的更改在提交的值之间不直接可见(可以通过$ form_state-> getValues()检索)。而是,它们在表单状态的用户输入值中可见,因此请尝试以下操作:
$form_state->getUserInput()['myhiddenfield']
对于隐藏字段,请谨慎使用getUserInput(),因为除非有充分的理由(例如在这种情况下),否则通常由“不友好的”实体来完成对隐藏字段的更改,它们试图破坏您的网站。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句