我在代码中创建了如下所示的字段结构,而不是使用webform UI。我以编程方式执行此操作的原因是因为我有数百种表单,我想一次性完成。
以下是我的代码:
for ($i = 0; $i <= 4; $i++) {
$form['submitted']['file' . $i] = array(
'#title' => t('File'),
'#type' => 'managed_file',
'#description' => t('Please upload a document or image.'),
'#default_value' => variable_get('file' . $i, ''),
'#weight' => 100,
);
$form['submitted']['remove_name'] = array(
'#type' => 'submit',
'#value' => t('Remove'),
//I NEED A WAY TO PASS $i AS ARGUMENT TO THE CALLBACK
'#submit' => array('form_remove_attachment'),
// Since we are removing a name, don't validate until later.
'#limit_validation_errors' => array(),
);
}
在回调之下
function form_remove_attachment($i) {
$form_state['submitted']['file' . $i]--;
// Setting $form_state['rebuild'] = TRUE causes the form to be rebuilt again.
$form_state['rebuild'] = TRUE;
}
现在我需要的是每个附件字段的删除按钮,以允许用户改变他们对附加文件的看法。我当然可以通过JS添加它,但这样就不会从$ form_state中删除附件。
有没有人有一些建议如何将$ i传递给回调form_remove_attachment?
答案 0 :(得分:0)
首先,您应使用与$form['submitted']['remove_name']
类似的内容,而不是$form['submitted']['remove_name' . $i]
,而不是$form['submitted']['file' . $i]
。
对于$form['submitted']['remove_name' . $i]
,您可以使用自定义属性,例如$form['submitted']['remove_name' . $i]['#mymodule_file_id']
。 (将mymodule替换为您正在使用的模块的简称。)然后,提交表单应使用以下代码。
function form_remove_attachment($form, &$form_state) {
// This is the same value used for #mymodule_file_id for the clicked button.
$file_id = $form_state['triggering_element']['#mymodule_file_id'];
// ...
}
附注:
$form_state
键的说明