我需要Yii帮助。
如何从文本框onChange事件中调用Controller操作?
更新 我有一个用CActiveForm构建的表单。这个表单有很多文本框。当我更改任何值时,必须更新其他值,使用新输入的值计算公式。所以我想做的是以下几点:
<tr>
<td>Average KW Demand:</td>
<td><?php echo $form->textField($lfac_model, 'kw_demand', array('size'=>5));?></td>
</tr>
<tr>
<td>Estimated Load Factor:</td>
<td><?php echo $form->textField($lfac_model, 'loadf', array('size'=> 5));?>/td>
</tr>
当用户更改“估计负载系数”时,应使用公式的结果更新“平均KW需求”值。我想通过将公式存储在表中,然后转到Controller操作,检索特定公式,计算新值并将其发送回视图。我不确定这是否是实现这一目标的最佳方法。
答案 0 :(得分:1)
您应该可以使用CJuiAutoComplete Yii小部件来执行您想要的操作。有一个基本演示here,Yii文档中还有其他示例。在您的情况下,您需要确保的主要事情是您还指定了“appendTo”选项,请参阅该窗口小部件使用的jQuery autocomplete docs。
基本上,您可以为“Estimated Load Factor”字段设置窗口小部件,并通过appendTo属性指向“Average KW Demand”字段。
如果您不想要自动填充内容并且只想替换该值,则可以在“loadf”值上使用htmlOptions属性“ajax”,如下所示:
'ajax' => array(
'type'=>'POST', //request type
'url'=>$this->createUrl('site/ajaxAction'), //url to call
'success'=>'function(data) { $(\'#kw_demand\').val(data) }',// function to call onsuccess
// "data" is returned data and function can be regular js or jQuery
)
请参阅:CHtml#ajax-detail和jQuery.ajax。在这种情况下,您很可能会返回纯文本,因此您的控制器功能将如下所示:
public function actionAjaxAction() {
[your data functions...]
echo $kw_demand_string;
Yii::app()->end()
}
答案 1 :(得分:1)
文本框的onChange
事件是一个javascript事件。它存在于应用程序的不同方面。
要在控制器上调用操作,您将不得不使用一些 AJAX (或异步调用)。这里的想法是基本上将一些数据发布到处理该操作的路径。
例如:
/product/details
=&gt; ProductController::actionDetails()
onChange
事件上设置了javascript,以调用将字段值(当前输入的文本)发布到控制器上的操作的方法。/product/ajaxautocomplete
=&gt; ProductController:actionAjaxAutocomplete()
您可以使用jQuery轻松完成此任务:
$.ajax({
type: 'POST',
url: '/product/ajaxautocomplete',
data: { 'searchPhrase' => searchBox.value },
success: function(data, textStatus, jqXHR) { applyValues(data); },
dataType: 'json'
});