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'
});