我在asp.net中制作了一个自定义的可折叠字段集控件。我使用jquery来添加切换效果。该控件工作得很好,但是当我在更新面板中使用我的fieldsets时,由于document.ready,因此回发我松开了我的jquery逻辑。
现在我已经阅读了关于Jquery的新Live()函数,但我没有让它工作。我做错了什么?有人有答案吗?
非常感谢
我的Jquery代码是:
$(document).ready(function() {
$.fn.collapse = function(options) {
var defaults = { closed: false }
settings = $.extend({}, defaults, options);
return this.each(function() {
var obj = $(this);
obj.find("legend").addClass('SmartFieldSetCollapsible').live("click", function() {
if (obj.hasClass('collapsed')) {
obj.removeClass('collapsed').addClass('SmartFieldSetCollapsible'); }
$(this).removeClass('collapsed');
obj.children().next().toggle("slow", function() {
if ($(this).is(":visible")) {
obj.find("legend").addClass('SmartFieldSetCollapsible');
obj.removeAttr("style");
obj.css({ padding: '10px' });
obj.find(".imgCollapse").css({ display: 'none' });
obj.find(".imgExpand").css({ display: 'inline' });
}
else {
obj.css({ borderLeftColor: 'transparent', borderRightColor: 'transparent', borderBottomColor: 'transparent', borderWidth: '1px 0px 0px 0px', paddingBottom: '0px' });
obj.find(".imgExpand").css({ display: 'none' });
obj.find(".imgCollapse").css({ display: 'inline' });
}
});
});
if (settings.closed) {
obj.addClass('collapsed').find("legend").addClass('collapsed');
obj.children().filter("p,img,table,ul,div,span,h1,h2,h3,h4,h5").css('display', 'none');
}
});
};
});
$(document).ready(function() {
$("fieldset.SmartFieldSetCollapsible").collapse();
});
答案 0 :(得分:5)
问题是你做的更多只是一个简单的选择器,你的实时选择
来自api.jquery.com “查找要发送到.live()的元素并不完全支持DOM遍历方法。相反,应始终在selecton之后直接调用.live()方法”
答案 1 :(得分:2)
if (obj.hasClass('collapsed')) {
obj.removeClass('collapsed').addClass('SmartFieldSetCollapsible'); }
$(this).removeClass('collapsed');
首先,如果类已折叠,则要删除该类并添加另一个类,然后删除该类折叠。我不知道它是否会影响系统的工作,但值得尝试。
如果您只使用.click(当字段未更新时),该功能是否有效?
答案 2 :(得分:1)
遍历是个问题。您可以通过简单的选择来解决它。
var obj = $(this),
obj.find("legend").addClass('SmartFieldSetCollapsible');
$('legend.SmartFieldSetCollapsible').live('click.collapsible', function(e){