为什么 jquery 选项选择不起作用
Why is the jquery option selection not working
我目前正在使用javascript和JQuery构建一个自定义控件,我有以下功能。
$(document).ready(function() {
$('select').each(function() {
var parent = this;
$('#comboBoxData li').on('click', 'li', function() {
alert('found');
var value = $(this).prop('id');
alert(value);
$(parent).val(value);
});
});
});
下面是标记:
<select style="display:none">
<option value='1'>1</option>
<option vlaue='2'>2</option>
</select>
<ul id="comboBoxData">
<li id='1'>1</li>
<li id='2'>2</li>
</ul>
我希望当我单击"#comboBoxData li"元素时,元素的 ID 属性用于从父输入中选择一个选项。我已经验证了"value"变量正在填充正确的数据,并且正在访问函数本身,但由于某种原因未选择该选项。出了什么问题?
尝试下面的代码,你会发现它有效:
$('#comboBoxData li').each(function () {
$(this).bind('click', function () {
var value = $(this).prop('id');
$(this).parent().prev("select").val(value);
});
});
http://jsfiddle.net/quAQm/9/
我一直在看你的代码,并认为我会发布我的版本。
从外观上看,您希望有多个select
列表暗示此增强功能。此外,由于这是一项增强功能,我认为应该即时生成ul
。这是代码和演示:
$('.selectEnhance').each(function (){
// Setup
$selectElement = $(this);
$selectElement.css("display","none");
// Build the list
var $listEnhancement = $(buildListEnhancement($(this)));
// Attach events
$listEnhancement.find('li').click({selectElement: $selectElement}, function(event){
event.data.selectElement.val($(this).text());
});
// Insert into DOM
$(this).after($listEnhancement);
});
以及从select
项构建ul
的基本函数:
function buildListEnhancement(selectElement)
{
var listElements = "";
selectElement.find('option').each(
function(){
listElements += "<li>" + $(this).val() + "</li>";
});
return "<ul>" + listElements + "</ul>";
}
您现在可以简单地为要增强的select
元素指定一个类名(class="selectEnhance"
(
这是一个工作示例。
可能是你的parent
识别代码错误。这对我有用:
$('#comboBoxData li').click(function () {
var value = $(this).prop('id');
$(this).parent().prev().val(value);
});
http://jsfiddle.net/6PJdU/
我不是jQuery专家,但逻辑对我来说看起来有点不对劲。在我的头顶上(需要检查属性选择器,这可能过于复杂(,这可能有助于您进步......
$("#comboBoxData li").on("click", function(e) {
var value = $(this).attr("id");
var option = $(parent).find("option[value='" + value + "']");
option.attr("selected", "selected");
});
这里的一个关键点是,虽然不一定与您的问题直接相关,但您可以绑定在"一组"元素上,并且不需要循环每个元素来将单个元素绑定到同一事件。重要的是,我认为,我正在做的是显式指定选项的selected
属性,而不是指定选择元素的val
。
HTML 示例中的组合框不是 <ul>
的父元素。您需要使用 jQuery 的prev()
方法返回到前一个同级,在本例中是您的选择框。
$('#comboBoxData li').bind('click', function () {
var value = $(this).prop('id');
$(this).parent().prev().val(value);
});
编辑:
忘记了将单击事件绑定到每个li
,因此您确实需要先使用parent()
选择器,然后使用prev()
选择器才能进入组合框
特别感谢James Allardice和Jamie Dixon。以下标记解决了我的问题:
$('#comboBoxData').on('click', 'li', function() {
var value = $(this).prop('id');
$(parent).val(value);
});
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- 角度ng变化或ng点击选择can'不起作用
- <选择>标签不起作用
- 初始化ng模型时,Angular ui选择占位符不起作用
- 动态填充Bootstrap选择选择器:change event dos'不起作用
- Highcharts:树映射选择状态不起作用
- 单击选项卡时jquery选项卡选择不起作用
- jQuery日期选择器在Codeigniter和Bootsrap模式表单中不起作用
- JQuery日期选择器在IE 7上不起作用
- jQuery选择ajax调用中附加的元素不起作用
- 引导程序选择在jquery pep中不起作用
- 当我动态创建元素时,选择的插件不起作用
- 指令中选择输入的双向绑定不起作用
- 棱角分明的日期选择器;在ngDialog中不起作用
- Jquery悬停选择不起作用
- 选择选项淘汰赛事件不起作用
- ng-单击在IE中不起作用的选项选择Angularjs
- jQuery选择器在脚本中不起作用,但在控制台中工作
- 循环遍历类名索引不起作用..选择
- .trigger(' selected:updated')不起作用.选择v1.6.1