2

我在 JQuery 中动态创建一个输入框列表,并在检查它们时有一个事件通知我。

$("#myDiv").on("change",  "input[type='checkbox']" , function(){
   if(this.checked){
     alert("HERE");
     //...
   }else{
    alert("THERE");
    //...
   }
});

当页面加载并显示所有复选框时 - 我可以通过选中/取消选中来输入。问题是我希望最初根据后端逻辑的结果检查其中的一些。所以我想在初始加载后进入这个功能。

我看了看,.trigger()但是.click(),似乎都没有成功。

我可以采取其他途径来输入此回调吗?

4

4 回答 4

2

如果要在复选框上显示选中状态,只需将checked属性设置为checked

<input type='checkbox' checked='checked' />

如果你想触发change();事件,

$('<your_checkbox>').change(); 

或者

$('<you_checkbox>').trigger('change');
于 2012-07-23T19:10:50.743 回答
1

在这种情况下,您可以创建一个命名函数而不是使用匿名函数,并在需要时调用它。

var myFunction = function(){
   if(this.checked){
     alert("HERE");
     //...
   }else{
    alert("THERE");
    //...
   }
}

$("#myDiv").on("change", "input[type='checkbox']", myFunction );

// triggering the function manually:
$("#myDiv input[type='checkbox']").each( myFunction );
于 2012-07-23T18:49:01.287 回答
0

当 myDiv 更改时触发您的代码,并且您传递了一个复选框列表。这里的'this'是mydiv。为什么不使用:

$('input:checkbox').each(function(){// Now this is referring your checkbox});
于 2012-07-23T18:50:03.767 回答
0

按名称单独定义您的函数,然后在页面为已检查的每个项目加载后调用它。

function onChange(this) {
    if(this.checked){
        alert("HERE");
        //...
    }else{
        alert("THERE");
        //...
    }
}

您监控复选框更改的代码将变为:

$("#myDiv").on("change",  "input[type='checkbox']" , function() {
    onChange(this);
});

由于我不知道代码是什么样的,所以我编写了一些代码来打印复选框并定义默认选中哪些复选框。它是 PHP,但这个概念应该适用于任何服务器端语言。

<select>
<?php
$items = array(
    'value1' => 'text1',
    'value2' => 'text2',
    'value3' => 'text3'
);

$selected = array(
    'value1' => true,
    'value3' => true
);

foreach ($items as $value => $text) {
    $selectedAttr = isset($selected[$value]) && $selected[$value]) ?
        " selected='selected'" : '';
    echo "<option value='$value'$selectedAttr>$text</option>";
}
?>
</select>

您需要打印运行您希望为每个选定选项执行的函数的 javascript。对于我使用的复选框示例,您想要的最终结果是:

$().ready(function() {
    var defaultSelected = [ "[option name='value1']" , "[option name='value3']" ];

    for (var i=0; i < defaultSelected.length; i++) {
        $(defaultSelected[i]).each(onChange);
    }
});

您需要在服务器端生成 javascript:

<?php

// $selected was defined in the previous code section

// Create selectors that will select each checkbox option
$selectors = array();
foreach ($selected as $s) {
    array_push($selectors, "[option name='$s']");
}

// Produces string: [ "[option name='value1']" , "[option name='value3']" ]
$jsSelectorArray = '[ "' . implode('" , "', $selectors) . '" ]';

echo "
$().ready(function() {
    var defaultSelected = $jsSelectorArray;

    for (var i=0; i < defaultSelected.length; i++) {
        $(defaultSelected[i]).each(function() {
            onChange(this);
        });
    }
});
";

?>
于 2012-07-23T19:29:43.747 回答