【问题标题】:JQuery function not working - sometimes [closed]JQuery 功能不起作用 - 有时 [关闭]
【发布时间】:2011-12-03 13:30:11
【问题描述】:

我有 2 个相同的代码块,当它首先从控制器中的索引加载时它可以工作,但是当我提交表单并加载此代码时,我的自动完成功能不适用于字段。

<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>public/blue.css" />
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/themes/base/jquery-ui.css" />    
<script type="text/javascript" src="<?php echo base_url(); ?>public/jquery-1.6.1.js"></script>    
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.js"></script>
<script type="text/javascript">

        $(document).ready(function() {
            alert('workin');


            //$(".publish-bottom").hide();
            $(".publish-right").hide();



            //title field
            $.ajax({

                type: "GET",
                cache: false,
                dataType: 'json',
                url: "publishlinks/search_movies",
                success:
                    function(response) {

                        alert('response received');
                        alert(response);

                        $("#title").autocomplete({
                            source: response,
                            minLength: 2,
                            select: function (event, ui) {

                                var selectedObj = ui.item;
                                var imgFilename = ui.item;                              
                                imgFilename = imgFilename.value;
                                imgFilename = imgFilename.replace(/ /g,"_");

                                $(".selected-right").empty();
                                $(".selected-left").empty();
                                $(".publish-right").show();

                                //render selected media
                                $(".selected-left").append('<a href="<?php echo "#"; ?>"> <img class="movie-img" src="<?php echo base_url(); ?>img_test/' + imgFilename + '"></a>');
                                $(".selected-right").append('<h4>' + selectedObj.title + '</h4>');
                                $(".selected-right").append(selectedObj.plot);

                                //update publication id  
                                $("#movieId").attr("value", selectedObj.movieid);
                                $("#selected-item").attr("value", "selected");

                                $(".new-movie").show();

                                //get selected item's publications
                                getPublications(selectedObj);

                            }

                        }).data( "autocomplete" )._renderItem = function( ul, item ) {

                            var imgFilename = item.label;
                            imgFilename = imgFilename.replace(/ /g,"_");

                            return $( "<li></li>" )
                                .data( "item.autocomplete", item )
                                .append( '<a>' + '<img src="http://localhost/portal/img_test/' + imgFilename + '" width="40" height="63" />' + item.title + '</a>' )
                                .appendTo(ul);
                        }

                    }

             });

        });

</script>

function search_movies() {

    $movies = $this->movie_model->get_movies();     
    echo json_encode($movies);

}

//works fine    
function index() {

            $this->load->model('user_model');
            $data['user'] = $this->user_model->get_user($this->session->userdata('userid'));

            $data['loggedIn'] = $this->is_logged_in() ? true : false;
            $this->load->view('header_view', $data);
            $this->load->view('publish_links_view');

}

表单提交代码:

            //Not working for autocomplete
            $error['linksError'] = 'You must select an item to publish links for.';         

            $data['user'] = $this->user_model->get_user($this->session->userdata('userid'));
            $data['loggedIn'] = $this->is_logged_in() ? true : false;
            $this->load->view('header_view', $data);
            $this->load->view('publish_links_view', $error);

【问题讨论】:

  • 该代码没有告诉我们,请发布您所指的实际功能
  • response 会是什么?除非它是 URI/URL,否则它很可能不起作用。
  • @Nathan Hoad 为什么不呢?这是一个 json 格式的字符串。
  • "只需指定源选项,即可自定义自动完成以使用各种数据源。数据源可以是:具有本地数据的数组、字符串、指定 URL、回调"@ 987654321@

标签: php jquery codeigniter relative-path


【解决方案1】:

我同意 user555116,我们没有足够的信息。但我确实看到您的代码存在一个问题。这可能是问题,也可能不是。你在这个块中定义了你的函数,你说:

$(function() {

});

嗯,是这个的简写形式:

$(document).ready(function() {


});

对于这两个块,jquery 所做的只是将代码保存在这些块中。当 jquery 收到 DOM 加载事件时,它会按照您发送给 jquery 的顺序运行每个函数。此外,这些函数中的每一个都不会隐式地访问另一个函数。除非您以某种方式创建对文档就绪块中定义的函数的引用,否则它们将在块执行后消失。但是,在这种情况下,更简单(也更正确)的解决方案是简单地从 $(function() { }) 中删除函数定义。

【讨论】:

  • 我发现 publishlinks/search_movies 没有得到控制器的成功响应。
  • 那么听起来可能是php错误。我注意到您的 ajax 语句中没有 data 选项。 publishlinks/search_movies 不需要任何变量吗?此外,您的 ajax 位于 jquery doc ready 块中,该块本身位于 doc ready 块中。尽管此代码仍将运行,但它没有任何作用。您可以通过将$.ajax() 移出$() 块来节省一些字节。
  • 没错,当您将函数传递给全局 JQuery 对象时,它默认为 $(document).ready() +1
  • 当然我的意思是$(function() {})
  • search_movies() 只是回显一个 json 编码的字符串。
猜你喜欢
  • 2013-12-11
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多