试图集成CakePHP和jQuery

时间:2010-03-03 14:08:05

标签: jquery cakephp

尝试使用下一个示例集成CakePHP和jQuery

http://bakery.cakephp.org/articles/view/dynamic-select-boxes-with-ajax-jquery

我想要的是当用户更改第一个选项元素时,自动填充具有适当值的第二个选择选项框。但是,没有任何反应,如果你可以帮助我的原因。

所以,有一个发票添加表单(add.ctp),下一个代码......

<?php echo $form->create('Invoice');?>

<?php echo $javascript->link('jquery.js'); 

$category = array('1' => 'First', '4' => 'Fourth', '7' => 'Seventh');
echo $form->input('client_id', array('options' => $category, 'empty' => 'Choose:'));
echo $form->select('clientBank_id', array("Choose category first"), null, null, false); 
?>


<script>
 $("#InvoiceClientId").change(function () {
    $.post('/invoices/listTitleByCategory/' + $(this).val(), function(data) {
        $("#InvoiceClientBankId").empty().append(data);
    }, 'html'); 
 })
</script>

此外,还有控制器(invoices_controller.php):

<?php
 var $name = 'Invoices';
 var $helpers = array('Html', 'Form', 'Time', 'Number', 'Javascript');
 var $paginate = array('order' => array('Invoice.pinned DESC', 'Invoice.invoiceNumber'));
 var $components = array('RequestHandler');

 function beforeRender(){
  // prevent useless warnings for Ajax
  if($this->RequestHandler->isAjax()){
   Configure::write('debug', 0);
  }
 } 

// etc...

  function listTitleByCategory($category = "") {
   $this->layout = 'ajax';
   $this->beforeRender();
   $this->autoRender = false;

   $data = $this->Invoice->Client->find('list');

   echo "<option value=0>just for testing...</option>";

   foreach($data as $key => $val) {
    echo "<option value=$key>$val</option>";
   }
  }


?>

如果你能帮我解决这个问题,请。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您确定第二个选择的ID是'InvoiceClientBankId'吗?

另外,如果你使用firefox和firebug:你会在网络标签中得到一个结果吗?

答案 1 :(得分:0)

您的代码的问题是您在DOM完全加载之前尝试调用jQuery调用。您需要将处理程序置于jQuery.ready()回调中:

<?php
    $javascript->codeBlock('
        $(document).ready(function(){
            $("#InvoiceClientId").change(function () {
                // stuff
            });
        });
    ', array('inline'=>false'));
?>

(我也冒昧地使用Cake的Javascript帮助器在<head>输出你的JS。)