动态菜单的Ajax调用适用于first <select>元素,而不是附加元素
Ajax call for dynamic menu works for first <select> element, but not additional ones
我试图用jquery创建一个动态菜单,我想用Ajax数据填充随后的菜单(从数据库中获取)。
然后我希望能够添加额外的下拉菜单并保留相同的功能。我有它的工作为一个单一的下拉和ajax调用是工作的,但它不会通过jquery(重复)函数添加的额外的下拉。
我不认为我需要添加一个计数器变量到php,因为我正在处理jquery的增量,但我只是不能从额外的下拉框(进入(.additionalsubj')到Ajax的输入-我甚至不能让他们在Firebug中显示。我有点卡住了-任何想法都会非常感激。
HTML: <h3>Primary Subject</h3>
<div class="subjselect">
<div class="select">
<select id="subject">
<option value="">Subject</option>
<option value="math">Math</option>
<option value="science">Science</option>
<option value="languages">Languages</option>
<option value="humanities">Humanities</option>
<option value="econ">Economics/Finance</option>
<option value="gmat">GMAT</option>
<option value="sat">SAT</option>
</select>
<select id="topic">
<option value="">Topic</option>
<option value="math">Math</option>
<option value="science">Science</option>
<option value="languages">Languages</option>
<option value="humanities">Humanities</option>
<option value="econ">Economics/Finance</option>
<option value="gmat">GMAT</option>
<option value="sat">SAT</option>
</select>
</div>
<a href="#" id="another" onclick="Repeat(this)"></br>Add Another Subject</a>
</div>
Jquery: var counter=1;
$(document).on('change', 'select#subject'+counter+'', function(){
var subject = $("select#subject"+counter+">option:selected").text();
var selector=$("select#subject"+counter+"");
console.log(selector);
console.log(subject);
$.ajax({
type: 'GET',
url: 'tutorprofileinput.php',
data: {"subject": subject},
dataType:'json',
success:function(data){
console.log(data);
var options = [];
$.each(data, function (key, val) {
options += '<option value="' + val.topic + '">' + val.topic + '</option>';
console.log(options);
});
$("select#topic").html(options);
},
error:function(){
// failed request; give feedback to user
$('#ajax-panel').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
}
});
});
function Repeat(obj){
counter++;
console.log(counter);
var selecoptions = '<div class="select"><select id="subject'+counter+'"><option value="">Subject</option><option value="math">Math</option><option value="science">Science</option><option value="languages">Languages</option><option value="humanities">Humanities</option><option value="econ">Economics/Finance</option><option value="gmat">GMAT</option><option value="sat">SAT</option></select></div><div class="select"><select id="topic'+counter+'"><option value="">Topic</option></select></div>';
$('.additionalsubj').append(selecoptions);
console.log($('.additionalsubj'));
}
和PHP从数据库获取数据:
<?php
include("php_includes/db_conx.php");
if (isset($_GET['subject'])){
$subject = $_GET['subject'];
$query = ("SELECT subject.id, topic FROM topics, subject WHERE subject='$subject' AND subject.id=topics.subjID ORDER BY subject");
$result = mysqli_query($db_conx, $query);
$rows = array();
while($r = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$rows[] = $r;
}
echo json_encode($rows);
exit();
}
?>
使用
$(document).on('change','select[id^=subject]',function(){
因为你添加了默认设置为1的counter
,所以我认为它甚至不能用于第一个选择框。
因此,使用以上code
,将适用于所有id
以subject
开头的selects
。
相关文章:
- 如何激活下拉菜单:在一个元素上单击768px宽度下方,在另一个元素上将鼠标悬停在768px上方
- HTML5上下文菜单-当菜单项被点击时,访问最初被点击的元素
- 如何在鼠标悬停时显示带有拉斐尔元素(圆、线)的上下文菜单
- 第二个下拉菜单元素上的重复下拉Javascript效果
- 禁用特定元素的移动长按上下文菜单
- Bootstrap下拉菜单不选择元素.需要下拉按钮组设计
- 如何使用选择下拉菜单更改元素
- 如果元素是在循环中创建的,则引导下拉菜单不会触发单击事件
- 如何使菜单容器在悬停两个元素以外的所有元素时隐藏
- jQuery导航菜单没有't更新第一个元素
- 替换 href 元素菜单中的 SID 值数据
- Selenium Webdriver 无法在菜单中找到 href 元素
- 无法设置活动菜单元素的样式
- Polymerjs 的自定义菜单元素单击事件
- 侧边栏子菜单元素未按预期显示/隐藏
- Joomla javascript(JQuery)手风琴菜单总是在单击最后一个子元素时展开所有节点
- 获取显示菜单的悬停元素的属性
- 将子元素与菜单的父元素重叠
- 无法突出显示菜单列表的第一个元素
- 如何在TinyMCE 4中将多个元素添加到自定义菜单中,并在单击时在编辑器画布上显示其内容