【发布时间】:2014-10-16 18:23:04
【问题描述】:
请有人帮忙,我真的被困了 2 天:|
我有一个 PHP 表单,我想允许用户按标题或演员选择电影。 所以,我正在考虑这些值(moviebyTitle,moviebyActor)的下拉菜单。为了按标题选择电影,我使用了 jQuery 自动完成功能,它从我的数据库中获取电影标题,它工作正常。
这是我的代码:
<select id="selectType" name="source">
<option value="">MoviesBy</option>
<option value="byTitle">byTitle</option>
<option value="byActor">byActor</option>
</select>
<input type="textbox" name= "tag" id="tags">
<div id="byActor" class="style-sub-1" style="display: none;" name="stylesub1" onchange="ChangeDropdowns(this.value)">
<select name="films[]" multiple="multiple" width="200px" size="10px">
<?php
include('moviedropdown.php');
?>
</select>
这里是javascript:
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/minified/jquery-ui.min.css" type="text/css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#tags").autocomplete({
source: "actorsauto.php",
minLength: 2
});
$("#selectType").change(function () {
if ($(this).val() == "byTitle")
$("#tags").autocomplete("option", "source", "filmsauto.php");
else
if ($(this).val() == "byActor")
$("#tags").autocomplete({
source: "actorsauto.php",
minLength: 2,
select: function (event, ui){
var selectedVal = $(this).val(); //this will be your selected value from autocomplete
// Here goes your ajax call.
$.post("actions.php", {q: selectedVal, q2: $("#selectType").val()}, function (response){
// response variable above will contain the option tags. Simply put in the dropdown.
$("#movieImdbId").html(response);
});
}
});
}
});
});
</script>
编辑:
这是actions.php:(请参阅上面的javascript部分)
<?php
if(isset($_GET['q']) && !empty($_GET['q']) && isset($_GET['q2']) && !empty($_GET['q2']) ){
// Here goes the cleaning code. Never use the variables received from $_GET and $_POST directly before processing it for malicious code.
$q = $_GET['q'];
$q2 = $_GET['q2'];
//$sql = fetchResults($q, $q2); // Some function which will run a database query and return some records in either object collection or arrays etc.
//I added this part to fetch data from DB
include('imdbConnection.php');
$sql = $conn->prepare('SELECT DISTINCT movieImdbId FROM movie_roleNames WHERE castName = :q');
$sql->execute(array(':q' => $q));
$html = "";
while($row = $sql->fetchAll(PDO::FETCH_OBJ)){
$option = '<option value="' . $row->movieImdbId . '">' . $row->movieImdbId . '</option>';
$html = $option;
}
echo $html; // <-- this $html will end up receiving inside that `response` variable in the `$.post` ajax call.
exit;
}
?>
我的问题:
我只是想知道如何根据用户在文本框中输入的值添加下拉列表。例如,如果用户在自动完成文本框中输入“汤姆克鲁斯”,则会添加一个下拉列表,显示播放“汤姆克鲁斯”的电影。 (我在有问题的 JavaScript 代码中做了评论)
我确实搜索了很多,但所有示例都可以动态填充某些下拉列表(like this one,或根据下拉列表中选择的值添加文本框...
请帮忙,我真的不是说有人为我写代码,我只是想找到任何示例或一些我可以学习如何做的方法。
谢谢,
【问题讨论】:
-
您正在使用
mysql_fetch_object从结果集中获取当前行。但是您正在访问它,就好像它是一个数组一样。要么使用$row->movieImdbId,要么将mysql_fetch_object替换为mysql_fetch_array。在您的 javascript 部分,您没有在第一个条件下使用我的select回调函数。这两种情况都需要。否则ajax调用不会命中。尝试将它添加到这两个部分,如果你成功了,请告诉我。此外,作为帮助说明,您可以使用浏览器的开发人员工具来查看您的 ajax 调用是否甚至发送到服务器。 -
如果您使用基于 Mozilla 的浏览器,您可以使用 Firebug 扩展。 Chrome 有一个内置的开发者工具栏。您可以在任何浏览器中使用 F10 访问它。
-
错字。它不是F10。它的 F12
-
@BasitNizami:感谢您的宝贵时间,我更改了与 t0 mysql_fetch_object 相关的部分。请查看我更新的代码(actions.php)。
-
@BasitNizami:关于您对 javascript 部分的看法,抱歉,请问您为什么要在第一个条件下使用它? (实际上,对于第一个条件“if ($(this).val() == "byTitle")”,它工作正常,我不想在这种情况下填充任何下拉列表(当用户选择电影时标题,自动完成就足够了:p)
标签: javascript php jquery autocomplete