Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend表单使用ajax/javascript onchange事件_Javascript_Ajax_Zend Framework_Zend Form - Fatal编程技术网

Zend表单使用ajax/javascript 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) {

我正在编写一个代码,以便在我的应用程序中使用onchange。这是到目前为止我的代码

.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>