如何使应用程序中的所有按钮(甚至动态创建)遵循jquery按钮小部件而不多次调用.button()

时间:2013-04-13 03:56:37

标签: javascript jquery asp.net-mvc jquery-ui jquery-ui-button

我是堆叠溢出的新手,这是我的第一个问题。请原谅我的任何错误。 这个问题更通用,但我试图寻找答案,却找不到答案。

假设我有一个页面,我正在使用jquery ui button()小部件来显示所有按钮。会发生什么是我为我页面上的所有按钮定义了一个特定的类。所以我可以指定$('。myButtonClass')。button();但每当我再次渲染具有按钮的局部视图时,我必须在局部视图中执行相同的操作。有没有办法可以全局指定按钮或任何元素的转换。

这是一个示例小提琴,可以在点击时添加按钮。但添加的按钮不是按钮小部件的转换(我不想使用克隆)。

http://jsfiddle.net/wjxn8/

$('.clsTest').button().click(function(){
    $(this).after('<input type="button" value="Added" class="clsTest"/>');
});

这可能没有: - 1)为创建的所有按钮手动添加按钮小部件的css类。 2)使用Javascript跟踪DOM更改并对所有按钮元素执行转换。

感谢您的帮助!!!

2 个答案:

答案 0 :(得分:3)

由于您正在寻找其他内容,为什么不在加载部分内容时触发自定义事件:

$('.clsTest').button().click(function(){
    $(this).after('<input type="button" value="Added" class="clsTest"/>').trigger('addButtonUI');
});
$(document).bind('addButtonUI',function(){
    $('.clsTest').button();
});

http://jsfiddle.net/wJXN8/3/

如果你触发你的活动并让文件听取它,那么你可以做任何你想做的事情。我本来可以添加更多按钮的功能,但这应该得到重点。

您要求的是,添加按钮时的某些事件....您需要自己想出并在添加按钮时触发它。有这样的:How to detect new element creation in jQuery?,它讨论了在将新元素添加到DOM时触发的特定事件。没有测试过,看起来它可能无法在IE上运行。

答案 1 :(得分:1)

我不是这个的忠实粉丝,但你可以轮询新的按钮。看看我的小提琴(听起来很有趣):

http://jsfiddle.net/lbstr/Hq97H/

使用您的示例,这看起来像:

setInterval(function(){
    $('.clsTest').not('.ui-button').button();
}, 1000);

正如我所说,我不是这个的忠实粉丝。我理解这里对$.live这样的东西的渴望,但我仍然认为在添加新内容时更好地初始化它。如果要对新内容进行ajax调用,只需在将其添加到DOM时进行初始化即可。

我的愚蠢的民意调查代码和$.live(现已弃用)可能很方便,但它们的表现非常糟糕。只是我的两分钱。你比我更了解你的代码!