http://jsfiddle.net/xuAQv/< - 链接到我在JsFiddle上的错误代码。
所以我发现这段代码将传统的表格选择框转换为他们的twitter引导风格版本。它基本上只是隐藏了选择,并使用bootstrap的css / js为选择框创建了html。
http://blog.iamjamoy.com/convert-select-boxes-to-a-fancy-html-dropdown 我对插件进行了一些定制,以改变下拉的外观。
我现在遇到的问题是$(“#mySelect”)。change(function(){});不再开火 我尝试将.live添加到它上面,并且没有任何运气。
我需要修改插件吗? 这是我的插件代码..
/*!
* Convert <select> elements to Dropdown Group
*
* Author: John Rocela 2012 <me@iamjamoy.com>
* Customized: Frank B 3/2012
*/
jQuery(function ($) {
$('select').each(function (i, e) {
if (!($(e).data('convert') == 'no')) {
//get some initial data...
xSelect = $(e).attr('id')
xLabel = $("#" + xSelect + " option:selected").text();
xClass = $(e).data('class')
$(e).hide().wrap('<div class="btn-group" id="select-group-' + i + '" />');
var select = $('#select-group-' + i);
select.html('<a class="btn dropdown-toggle ' + xClass + '" data-toggle="dropdown" href="javascript:;">' + xLabel + ' <span class="caret"></span></a><ul class="dropdown-menu"></ul><input type="hidden" value="' + $(e).val() + '" name="' + $(e).attr('name') + '" id="' + $(e).attr('id') + '" class="' + $(e).attr('class') + '" />');
$(e).find('option').each(function (o, q) {
select.find('.dropdown-menu').append('<li><a href="javascript:;" data-title="' + $(q).text() + '" data-value="' + $(q).attr('value') + '">' + $(q).text() + '</a></li>');
if ($(q).attr('selected')) select.find('.dropdown-menu li:eq(' + o + ')').click();
});
select.find('.dropdown-menu a').click(function () {
select.find('input[type=hidden]').live().val($(this).data('value')).change();
select.find('.btn:eq(0)').html($(this).text() + ' <span class="caret"></span>');
});
}
});
});
答案 0 :(得分:2)
如果您查看代码中实际发生的情况,则选择将被隐藏的输入替换。当您更改该值时,就会在其上调用change()
。您将需要使用事件委派。像这样:
$("<parent selector>").on("change","#mySelect", function(){});
其中<parent selector>
是一个选择器,匹配未被替换的select的某个父级。如果需要,它可以是document
,但理想情况下,您希望它尽可能远离树。
live
无效的原因是因为它应该是这样的:
$("#mySelect").live("change", function(){});
如果您使用最新的jquery,则不应使用live
,但应使用on
。
编辑:更新了您的小提琴:http://jsfiddle.net/xuAQv/2/