对jquery函数的引用不起作用

时间:2016-04-20 18:21:23

标签: javascript jquery

在我的布局中,当你点击div

时,我指的是一个jquery函数
echo '<div class="fright menu_opcion" onclick="cambiarMenu(-1, \'users\', \'panel\');">Inicio</div>';
echo '<div class="fright menu_opcion"  onclick="cambiarMenu(-1, \'eventos\', \'index\');">Eventos</div>';
echo '<div class="fright menu_opcion"  onclick="cambiarMenu(-1, \'eventos\', \'add\');">Crear evento</div>';

HTML code:

<div class="fright menu_opcion" onclick="cambiarMenu(-1, 'users', 'panel');">Inicio</div>
<div class="fright menu_opcion"  onclick="cambiarMenu(-1, 'eventos', 'index');">Eventos</div>
<div class="fright menu_opcion"  onclick="cambiarMenu(-1, 'eventos', 'add');">Crear evento</div>

但总是得到这个错误:

功能:

<script>
cambiarMenu = function( evento_id, controller, action ) {
    if (evento_id == 0)
        return;
    url='<?php echo $this->Html->url(array('admin'=>'true',
                                           'plugin'=>null,
                                           'controller' => 'menus',
                                           'action' => 'menu_change'));?>/'+evento_id;
    $.post(url, function(data) {
        if(data) 
            if (data != -1){
                window.location.href = '<?php if ($SuperAdmin) $action = 'view'; else $action = 'view';
                                                echo $this->Html->url(array('admin'=>'true',
                                                                      'plugin'=>null,
                                                                      'controller' => 'events',
                                                                      'action' => $action));?>';
            } else {
                redirect = ('<?php echo $this->Html->url(array('admin'=>'true',
                                                                      'plugin'=>null,
                                                                      'controller'=>'',
                                                                      'action' => ''));?>/').split('admin');

                window.location.href = redirect[0] + 'admin/'+controller+'/'+action;
            }
        }
    );
}

此函数指的是重定向用户的位置,我使用Cakephp为什么代码是。

Uncaught ReferenceError: cambiarMenu is not defined

1 个答案:

答案 0 :(得分:1)

是否在页面中定义了javascript函数? 要么 包含该函数的javascript文件是否正确包含? 这可能是一个时间问题。

如果您想要一种更干净,更可靠,更易于调试的方法,请进一步阅读...

使用jQuery事件监听器执行此操作:

<script>
function cambiarMenu(val1,val2,val3)
{
        alert('cambiarMenu called with '+val1+','+val2+','+val3);
}
$(document).ready(function(){
        $(".menu_opcion")
                .click(function(){
                        var menuVal = $(this).html();
                        switch(menuVal)
                        {
                                case "Inicio":
                                        cambiarMenu(-1, 'users', 'panel');
                                        break;
                                case "Eventos":
                                        cambiarMenu(-1, 'eventos', 'index');
                                        break;
                                case "Crear evento":
                                        cambiarMenu(-1, 'eventos', 'add');
                                        break;
                                default:
                        }
                });
                /*etc etc etc....*/
});
</script>
<div class="fright menu_opcion">Inicio</div>
<div class="fright menu_opcion">Eventos</div>
<div class="fright menu_opcion">Crear evento</div>

然后我再次反对使用php echo语句和每行html的zillion引用转义,并且当可以避免时将javascript放在html onClick属性中。

东西更容易调试...

$(document).ready ...处理加载问题。您还可以使用此处理程序策略链接其他事件,例如mouseover等:

$(".menu_opcion")
        .click(function(){
                var menuVal = $(this).html();
                switch(menuVal)
                {
                        case "Inicio":
                                cambiarMenu(-1, 'users', 'panel');
                                break;
                        case "Eventos":
                                cambiarMenu(-1, 'eventos', 'index');
                                break;
                        case "Crear evento":
                                cambiarMenu(-1, 'eventos', 'add');
                                break;
                        default:
                }
        })
        .mouseover(function(){})
        .mouseout(function(){}); 

        /*etc etc etc....*/

请注意,分号仅在链的末尾,而不是在每个事件之后...... 干杯!