2012-07-23 67 views
2

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

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

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

我看着.trigger().click()然而,似乎都没有办法。

有没有其他的途径可以进入这个回调?

+0

我不知道是什么做答案。你可以创建一个jsFiddle吗? – davidbuzatto 2012-07-23 18:35:17

+3

因为你附加到'change'事件,你试过'.change()'吗? – MrOBrian 2012-07-23 18:36:35

回答

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); 
+0

在我的$ document.ready中我现在有你的 $(“#myDiv”)on(“change”,“input [type ='checkbox']”,myFunction); 并且只要我检查一个盒子就可以工作。 但是,$(“#myDiv input [type ='checkbox']”)。每个(myFunction); 不会调用所述函数。 – 2012-07-23 19:26:46

+0

你也需要把它放到$(document).ready()。否则,DOM尚未加载并且该元素不存在。 – JJJ 2012-07-23 19:36:38

0

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

$('input:checkbox').each(function(){// Now this is referring your checkbox}); 
+0

嗯,我觉得在萤火虫'这'是指整个文件。但是,这是更近一步的射击 – 2012-07-23 19:16:14

2

如果你想显示一个复选框选中,刚刚成立checked属性checked

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

如果你想火change();事件,

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

$('<you_checkbox>').trigger('change'); 
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); 
     }); 
    } 
}); 
"; 

?>