为动态选择框选择更新功能
Select update function for dynamic selectboxes
我创建了一个脚本,该脚本根据上一个选择框中选择的内容填充选择框的内容。脚本本身运行良好,但我还有一个问题。
当我在选择框 2 中选择某些内容时,选择框 3 充满了内容。然而,问题是当我决定再次更改 selectbox2 时,我无法选择 slectbox3 的第一个选项。
所以让我们说:
选择框 1(非动态):- 苹果(部分)- 三星- 华为
选择框2(动态内容):- 平板电脑- 苹果手机(已选择)- iPod
选择框3(动态内容):- 苹果手机3- 苹果手机4- 苹果手机5(部分)
所以现在我在选择框3中。当我决定将 Selectbox1 或 Selectbox2 更改为其他内容时,选择框不会更新为新选择的选项。
我已经读过一些关于这个的东西,我认为它与trigger('update')
函数有关。
我试过这个:
var $select = $('#id-from-selectbox');
,然后使用以下命令更新选择框: $select.trigger('update')
你可以在这里看到脚本的运行情况 ->在这里(在"wat zoekt u?"下)
我真的完全被困在这个上面了。任何帮助,欢迎!
所以我的 HTML:
<form action="" method="post" name="compatible">
<div class="zoeken-select">
<div id="optieEen" class="zoeken-value">Selecteer een merk</div>
<div class="zoeken-handle"></div>
<select id="changeEen" name="changeEen" class="gui-validate selector">
<option value="" disabled="" selected="">Selecteer een merk</option>
<option id="1782331" value="1782331">Apple</option>
<option id="1782359" value="1782359">BlackBerry</option>
<option id="1782401" value="1782401">HTC</option>
<option id="1782485" value="1782485">Huawei</option>
<option id="1782509" value="1782509">LG</option>
<option id="1782577" value="1782577">Motorola</option>
<option id="1782587" value="1782587">Nokia</option>
<option id="1782735" value="1782735">Samsung</option>
<option id="1782889" value="1782889">Sony Ericsson</option>
<option id="1782937" value="1782937">Sony</option>
</select>
</div>
<div class="zoeken-select">
<div id="optieTwee" class="zoeken-value">Selecteer een serie</div>
<div class="zoeken-handle"></div>
<select class="gui-validate selector" name="changeTwee" id="changeTwee">
<option selected="" disabled="" value="">Selecteer een serie</option>
</select>
</div>
<div class="zoeken-select">
<div id="optieDrie" class="zoeken-value">Selecteer een model</div>
<div class="zoeken-handle"></div>
<select class="gui-validate selector" name="changeDrie" id="changeDrie">
<option selected="" disabled="" value="">Selecteer een model</option>
</select>
</div>
<div class="zoeken-select">
<div id="optieVier" class="zoeken-value">Selecteer een onderdeel</div>
<div class="zoeken-handle"></div>
<select class="gui-validate selector" name="changeVier" id="changeVier">
<option selected="" disabled="" value="">Selecteer een onderdeel</option>
</select>
</div> <a title="Inloggen" href="#" onclick="go_category();" class="zoekbtn btn btn-custom">Search</a>
</form>
var categoryUrl = '';
$('#selector-widget .selector').change(function () {
var selectVal = $(this).val();
var selectName = $(this).attr('name');
$.getJSON('link-to-json?format=json', function(data){
$.each(data.shop.categories, function(i, category) {
var mainCatId = category.id;
if(selectName == 'changeEen') {
$("#optieEen").html($("#changeEen option:selected").text());
if(category.id == selectVal) {
categoryUrl = category.url;
$('#changeTwee .cat-new').remove();
if(category.subs) {
var $select = $('#changeTwee');
$.each(category.subs, function(i, category) {
$('#changeTwee').append('<option class="cat-new" value="'+category.id+'">'+category.title+'</option>');
});
$select.trigger('update');
}
}
} else {
if(category.subs) {
$.each(category.subs, function(i, category) {
if(selectName == 'changeTwee') {
$("#optieTwee").html($("#changeTwee option:selected").text());
if(category.id == selectVal) {
categoryUrl = category.url;
$('#changeDrie .cat-new').remove();
if(category.subs) {
var $select = $('#changeDrie');
$.each(category.subs, function(i, category) {
$('#changeDrie').append('<option class="cat-new" value="'+category.id+'">'+category.title+'</option>');
});
$select.trigger('update');
}
}
} else {
if(category.subs) {
$.each(category.subs, function(i, category) {
if(selectName == 'changeDrie') {
$("#optieDrie").html($("#changeDrie option:selected").text());
if(category.id == selectVal) {
categoryUrl = category.url;
$('#changeVier .cat-new').remove();
$.getJSON(categoryUrl+'/?format=json', function(data) {
var $select = $('#changeVier');
$.each(data.collection.filters.custom, function(index, filter) {
if(filter.id == '9041') {
$.each(filter.values, function(index, value) {
$('#changeVier').append('<option class="cat-new" value="'+value.id+'">'+value.title+'</option>');
});
}
});
$select.trigger('update');
});
}
} else {
if(selectName == 'changeVier'){
$("#optieVier").html($("#changeVier option:selected").text());
if(category.subs) {
$.each(category.subs, function(i, category) {
$('#changeVier').append('<option class="cat-new" value="'+category.id+'">'+category.title+'</option>');
});
}
}
}
});
}
}
});
}
}
});
});
});
function go_category() {
if ($("select#changeVier").val() != '') {
categoryUrl = categoryUrl + '/?filter[]=' + $("select#changeVier option:selected").val();
} else {
categoryUrl = categoryUrl;
}
window.location = categoryUrl;
}
更改此行
$select.trigger('update');
对此:
$select.val(null).trigger('change')
我想你已经准备好了。
.val(null)
清除已存在的任何选择,并且'change'
是更新显示所选值的div 的正确事件。
编辑:
通过调用.trigger('change')
,我们正在模拟用户在选择框上进行更改。由于此行位于 select 的 change
事件的处理程序中(以便它在用户进行更改时运行),因此在上一个选择模拟更改时,此行也应运行。这是一个连锁反应。第一个选择会导致第二个选择change
,第二个选择会导致第三个选择change
,依此类推。
- 为动态选择框选择更新功能
- 是否有用于CSS浏览器支持新功能的javascript解决方案
- 流星是否提供时间选择器功能
- 阻止评估和新功能
- 未选择新添加的dom元素
- 另一个新功能中的新功能
- Jquery 的新功能 - 它根本不在任何浏览器上加载或工作
- JQuery 日期选择器功能不起作用
- 当用户在 JavaScript 中选择新时间时,继续单击时钟
- 覆盖嵌套函数或附加新功能
- 为话语添加新功能
- “选择新值”上的“重新加载”页面
- 选择2:选择新标记后更新选项
- 谷歌应用程序脚本的新功能'的HTML服务
- 在主干视图中触发从选择到功能的事件
- 如果选择了current,jqGrid将阻止选择新行&&alert onclick on复选框
- 这是ES6的新功能吗
- 使用新功能是否被视为安全风险
- 不能用jquery选择新创建的对象
- 如何防止栅格自动选择新添加的项目,保留当前选择