Javascript Yii2按钮单击包含PHP的JsExpression
我想提交一个表单,其字段是由未知数量的元素组成的数组Javascript Yii2按钮单击包含PHP的JsExpression,javascript,php,html,yii2,yii2-advanced-app,Javascript,Php,Html,Yii2,Yii2 Advanced App,我想提交一个表单,其字段是由未知数量的元素组成的数组 class DynamicForm extends Model { /** var string[] */ public elements[]; } 在有表单提交的视图中,我想添加一个按钮,该按钮具有“onclick”Javascript函数,该函数在表单innerHtml中添加一个新字段。不幸的是,我找不到在javascript表达式中嵌入一些PHP代码的方法。这就是我现在的处境: <?php $form = Act
class DynamicForm extends Model
{
/** var string[] */
public elements[];
}
在有表单提交的视图中,我想添加一个按钮,该按钮具有“onclick”Javascript函数,该函数在表单innerHtml中添加一个新字段。不幸的是,我找不到在javascript表达式中嵌入一些PHP代码的方法。这就是我现在的处境:
<?php
$form = ActiveForm::begin([
'id' => 'test-form',
'layout' => 'horizontal',
'fieldConfig' => [
'errorOptions' => [
'role' => 'alert',
],
'horizontalCssClasses' => [
'label' => 'col-sm-3',
'offset' => 'col-sm-offset-3',
'wrapper' => 'col-sm-9',
'error' => '',
'hint' => '',
],
],
]);
$formField = $form->field($model, 'elements[]', []);
$JsFunction = new \yii\web\JsExpression(
"function addField() {
document.getElementById(\"test-form\").innerHTML += \"<?php echo $formField; ?>\";
};
addField();"
);
echo Html::button(
'Add element',
[
'class' => 'btn btn-primary',
'onclick' => $JsFunction,
]
);
?>
奇怪的是,如果我在innerHTML中放入一个字符串,比如“你好!”
,它就工作得很好。另一件奇怪的事情是,如果我把“php echo”命令生成的HTML代码
'<input type=\"text\" id=\"dynamicform-elements\" class=\"form-control\" name=\"DynamicForm[elements][]\">'
“”
它仍然有效
虽然我认为为Yii::ActiveForm
输入手动HTML代码并不是一个很好的实践,但这就是为什么我希望PHP能够完成这项工作
提前谢谢你 在视图中
$this->registerJs("addField(". $formField .")", 3);
$this->registerJsFile('/js/file.js', ['position' => 3]);
在file.js中
"function addField(variable) {
document.getElementById("test-form").innerHTML += variable;
};
在JavaScript文件中,您可以使用constructor的参数创建类,以便更好地自定义类。e、 g
var class = function (config) {
this.var1= config;
function addField() {
document.getElementById("test-form").innerHTML += this.var1;
}
};
从PHP的角度来看
$this->registerJs("var addField = new Class(".\yii\helpers\Json::encode($same_array).")", 3);
我终于设法解决了这个问题,这是PHP的html生成代码中的一些字符的问题。如果我这样做:
$formField = $form->field($model, 'elements[]', []);
$formField = str_replace(["\r\n", "\n", "\r"], ' ', $formField);
$formField = str_replace(["\""], '\'', $formField);
$this->registerJs('var addField = function(field) {
form = document.getElementById(\'my-form\');
form.innerHTML += field;
};', View::POS_HEAD);
echo Html::button(
'Add keyword',
[
'id' => 'myButton',
'class' => 'btn btn-primary',
'onclick' => 'addField("' . $formField . '")',
]
);
…工作正常。很遗憾,此功能可能重复,但不起作用。我得到一个“意外的令牌”