2012-07-23 106 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); 
     }); 
    } 
}); 
"; 

?>