Javascript 将iCheck(jQuery插件)应用于动态创建的复选框
我使用奇妙的插件在表单中设置复选框的样式 使用该插件,我只需调用Javascript 将iCheck(jQuery插件)应用于动态创建的复选框,javascript,jquery,jquery-plugins,icheck,Javascript,Jquery,Jquery Plugins,Icheck,我使用奇妙的插件在表单中设置复选框的样式 使用该插件,我只需调用$('input').iCheck(),即可应用所需的外观和功能 但是,我一直无法在动态创建的复选框上调用.iCheck()函数 在ajax调用中,我在success函数中构建了如下复选框:;这是在一个$中。每个块中,但为了简单起见,我只在语句中包含了代码 var chk = $('<div><input id="' + n.ID + '" type="checkbox" name="lblChk"><
$('input').iCheck()
,即可应用所需的外观和功能
但是,我一直无法在动态创建的复选框上调用.iCheck()
函数
在ajax调用中,我在success函数中构建了如下复选框:;这是在一个$中。每个块中,但为了简单起见,我只在语句中包含了代码
var chk = $('<div><input id="' + n.ID + '" type="checkbox" name="lblChk"><label for="' + n.ID + '">' + n.Title + '</label></div>');
el.append(chk);
var chk=$(''+n.Title+'');
el.追加(chk);
其中,el
是id为container
的div,它已经存在于DOM树中,n
是作为JSON返回的我的对象
在构建复选框之后,我调用$(“#容器输入”).iCheck()显然,除了标准复选框,我没有什么特别的。我认为这是因为复选框是在调用.iCheck()
之后动态创建的。但即使在我创建复选框并调用.iCheck()
之后,结果也是一样的
有人能指导我吗?试试这个
$('#container').find('input').iCheck();
您是否尝试过检查$(“#容器输入”)的长度
?我不确定,但输入不是容器的直接子级,因此可能无法使用选择器$(“#容器输入”)
尝试此操作
$('#container').iCheck({checkboxClass: 'icheckbox_flat-green',radioClass: 'iradio_flat-green'});
还有另外一种情况。。。当iCheck有回调时
此代码不适用于ajax加载的输入,因为它是bind()的替代品:
应改用委派事件:
$(document).on('ifChecked', '#mycheckbox', function(event) {
alert('done');
});
好吧,我以前也遇到过类似的问题,我是这样解决的:
假设el
变量是一个jQuery元素,我将把插件iCheck的初始化绑定到el
的满载,因此:
此代码应放在AJAX附加数据之后
el.ready(function() {
$('#container input').iCheck({
checkboxClass: 'icheckbox_flat-green',
radioClass: 'iradio_flat-green' // If you are not using radio don't need this one.
});
});
记住根据HTML结构的特殊性调整代码。在元素被附加到页面之后运行上述代码,您正在初始化这些新添加元素的iCheck,但是如果您使用iCheck回调,则只有在您正确声明这些回调,并将事件委托给适当的标记时,插件才会起作用
此代码应放置在iCheck first initialization上
$(document).on('ifChecked', '#mycheckbox', function() {
$(this).addClass('selected');
});
$(document).on('ifUnchecked', '#mycheckbox', function() {
$(this).removeClass('selected');
});
我刚刚遇到了同样的问题,解决方法很简单:调用iCheck方法
var id = some_id;
var one_row = "<tr><td>...<td><td><input type=\"radio\" class=\"minimal\" id=\"" + id + "\" name=\"" + id + "\">radio1</td></tr>";
// add this row to HTML
// call the initialize method
$('#'+id).iCheck({radioClass: 'iradio_minimal-blue'});
var id=some\u id;
var one_row=“…radio1”;
//将此行添加到HTML
//调用initialize方法
$('#'+id).iCheck({radioClass:'iradio#u minimal-blue'});
试试这个:
$('input').iCheck({
checkboxClass: 'icheckbox_flat-blue',
radioClass: 'iradio_flat-blue'
});
如果要从特定div设置,请尝试以下操作:
$('#MyDivId input').iCheck({
checkboxClass: 'icheckbox_flat-blue',
radioClass: 'iradio_flat-blue'
});
查看上的文档,请参见下面的答案和注释:。希望这能有所帮助。@Yatrix感谢您的回复,但您提到的是哪一个答案?它是带有setTimeout()选项的吗?Womi位于页面底部是的,但这是一个非常肮脏的解决方案。您不知道ajax调用何时完成,因此调用setTimeout(恰好在成功或完成事件之前被调用)是我不打算冒的风险:)您找到解决方案了吗?如果没有,请提供完整的代码。$(“#容器输入”)
选择#容器
内的每个
,无论它是否是直接子容器。直接子项的选择将与css中使用$('#container>input')
时的选择相同。如果我在每个输入上都附加了一个ifToggled回调怎么办。。。我该怎么开始呢?@Florin你能详细解释一下吗?如果你有不同的情况,最好单独问一个问题。看不到任何与问题相关的信息。。。如果这是某种事件。。。请参阅Jquery中的live()或on()方法。避免使用“try this”或“try this”。然而,用提琴展示一些例子是个好主意
$('#MyDivId input').iCheck({
checkboxClass: 'icheckbox_flat-blue',
radioClass: 'iradio_flat-blue'
});