Zend表单使用ajax/javascript onchange事件
我正在编写一个代码,以便在我的应用程序中使用onchange。这是到目前为止我的代码Zend表单使用ajax/javascript onchange事件,javascript,ajax,zend-framework,zend-form,Javascript,Ajax,Zend Framework,Zend Form,我正在编写一个代码,以便在我的应用程序中使用onchange。这是到目前为止我的代码 .Phtml <script type="text/javascript"> function submit() { $id = intval($_GET['id']); $satellite = intval($_GET['satellite_id']); if ($id == 0) {
.Phtml
<script type="text/javascript">
function submit()
{
$id = intval($_GET['id']);
$satellite = intval($_GET['satellite_id']);
if ($id == 0)
{
echo "Please select a Region";
}
else
{
$query = "select * from satellites where region_id = '".$id."'";
$query = mysql_query($query);
echo "<select name='satellite_id'><option value=''>-- select one --</option>";
while ($row = mysql_fetch_assoc($query))
{
echo "<option value='".$row['satellite_id']."'".($row['satellite_id']==$satellite?" selected":"").">".$row['satellite_name']."</option>";
}
echo "</select>";
//DisplayFormRow ("Satellite", FormDropDownBox ("satellite_id", $SatelliteARY, $Result['satellite_id']));
}
}
</script
//zend code Form
$region_name = new Zend_Form_Element_Select('region_name');
$region_name->setAttribs(array('style' => 'width: 150px;'));
$region_name ->setLabel('Region')
->onchange('this.form.submit();') //tried this code ->onchange('javascript:submit();')
->addMultiOption('--Select One--', '--Select One--');
$mdlRegions = new Model_Regions();
$regions = $mdlRegions->getRegions();
foreach ($regions as $region)
{
$region_name->addMultiOption($region->region_id, $region->region_name, $region->region_short_name);
}
//model
<?php
class Model_Regions extends Zend_Db_Table_Abstract
{
protected $_name = 'regions';
//protected $_name = 'smmedetails';
public function getregion($region_id)
{
$region_id = (int)$region_id;
$row = $this->fetchRow('region_id = ' . $region_id);
if (!$row) {
throw new Exception("Could not find row $region_id");
}
return $row->toArray();
}
public function smmedetails2region($region_name)
{
$data = array(
'region_name'=> $region_name
);
return $this->insert($data);
}
public function getRegions()
{
$select = $this->select();
return $this->fetchAll($select);
}
}
//controller
public function registerAction()
{
$this->view->headScript()->appendFile('/js/ui/jquery.ui.autocomplete.js');
$form = new Form_SmmeDetails();
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
$companyname = $form->getValue('companyname');
$companytradingname = $form->getValue('companytradingname');
$region_name = $form->getValue('region_name');
$satellite_name = $form->getValue('satellite_name');
$city = $form->getValue('city');
$companyaddress = $form->getValue('companyaddress');
$addresscode = $form->getValue('addresscode');
$companypostaladdress = $form->getValue('companypostaladdress');
$postalcode = $form->getValue('postalcode');
$companyphonenumber = $form->getValue('companyphonenumber');
$companyfaxnumber = $form->getValue('companyfaxnumber');
$companycellnumber = $form->getValue('companycellnumber');
$businessemailaddress = $form->getValue('businessemailaddress');
$businesswebsite = $form->getValue('businesswebsite');
$smmedetails = new Application_Model_DbTable_SmmeDetails();
$smmeid = $smmedetails ->smmedetailsSmmeDetails($companyname, $companytradingname, $region_name, $satellite_name, $city, $companyaddress, $addresscode, $companypostaladdress, $postalcode, $companyphonenumber, $companyfaxnumber,
$companycellnumber, $businessemailaddress, $businesswebsite);
// $region = new Application_Model_DbTable_Region();
//$region ->smmedetails2region($formData, $smmedetails->smmeid);
$this->_redirect('/admin/smme/register2/smmeid/'.$smmeid);
} else {
$form->populate($formData);
}
}
}
假设代码查看一个隐藏的输入选择,称为卫星当您从区域中选择一个feild选项时,卫星应根据所选区域查看某些选项。简而言之,所选区域应与用户选择的区域相对应。例如,该省是豪登省,因此cites将是,约翰塞堡,比勒陀利亚等。注意,区域和卫星选项是根据其名称和id从数据库表中调用的。上面的代码不断给我和错误消息:Method onchange不存在。被告知不要使用onchange方法。我应该使用ajax吗?我可以在视图中使用javascript和sqlquery吗?还是应该将其作为操作调用?如果是,怎么做?下面是一个简单的图片示例。
请帮忙
提前谢谢你我想对你那里的东西提出一些建议 首先,为了简单起见,我不使用onChange函数,因为我看不到它,加上以这种方式编写的JavaScript或jQuery可能会变得难以维护和正确编写。相反,包含一个外部JavaScript文件要简单得多。通过这样做,您还可以单独测试和调试JavaScript,以及重用它 请看一看关于和的优秀文档。我用过这些和其他的,它们都很直截了当。对于测试,我推荐初学者。这使测试变得轻而易举 其次,如果您使用Zend库来表示Model_Regions和$region_name,那么我建议使用它们来代替直接的mysql调用。这将允许您构建一个好的库,您可以根据需要继续扩展它,并且它使编写SQL更快、更安全 对于控制器,我建议使用Restful路由的RestController
我希望这能帮助你解决这个问题。如果您还需要什么,请告诉我。谢谢您给我发电子邮件。 我的做法如下: 首先我设置表单,然后在控制器中设置一个动作。 让我们说getmajorgroupAction 在该操作中,我将禁用布局,并根据id获取相关结果。 然后在视图文件中,循环浏览 因此,该调用的输出将是
<option value="1">1</option>
<option value="2">2</option>
希望这是有意义的。谢谢,这很有用,但我用下面的公式找到了一种方法,但是每次我在会话中单击第一个选择时,第二个选择总是出现,例如,如果一个人选择了错误的选择并重新尝试,它会显示另一个字段,而不是修复该字段。我认为这是一个连续的循环。这是我的剧本
<script type="text/javascript">
$(document).ready(function() {
$("#region_name").on('change', function () {
ajaxAddField();
}
);
}
);
// Retrieve new element's html from controller
function ajaxAddField()
{
$.ajax(
{
type: "POST",
url: '<?php echo $this->baseURL()?>/admin/ajax/get-cities/city/' + encodeURIComponent($('#region_name').val()),
success: function(newElement) {
// Insert new element before the Add button
//$(this).prev().remove().end().before('#city-label');
$("#city-label").before(newElement);
}
}
);
}
</script>
如果你有更多的细节要添加到你以前的问题,请编辑它,而不是问一个新的问题。请检查下面我的答案仍然需要一些帮助抱歉的延迟回复你。我会很快给你一个答案。请检查下面我的答案仍然需要一些帮助
<script type="text/javascript">
$(document).ready(function() {
$("#region_name").on('change', function () {
ajaxAddField();
}
);
}
);
// Retrieve new element's html from controller
function ajaxAddField()
{
$.ajax(
{
type: "POST",
url: '<?php echo $this->baseURL()?>/admin/ajax/get-cities/city/' + encodeURIComponent($('#region_name').val()),
success: function(newElement) {
// Insert new element before the Add button
//$(this).prev().remove().end().before('#city-label');
$("#city-label").before(newElement);
}
}
);
}
</script>