我有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);
答案 0 :(得分:2)
我同意user555116,我们没有足够的信息。但我确实看到你的代码存在一个问题。这可能是问题,可能不是。你可以在这个块中定义你的函数:
$(function() {
});
那么,这是简短的形式:
$(document).ready(function() {
});
对于这两个块,所有jquery都会将代码保存在这些块中。当jquery收到DOM加载的事件时,它按照您将其发送到jquery的顺序运行每个函数。而且,这些功能中的每一个都不会隐式地访问另一个。除非您以某种方式创建对doc ready块中定义的函数的引用,否则它们将在块执行后消失。但是,在这种情况下,更简单(也更正确)的解决方案是简单地从$(function() { })
中删除函数定义。