2015-06-19 50 views
2

我試圖將按鍵和表單值的更改綁定到更新函數,以便最終用戶可以實時查看其更新的效果。由於某種原因,它根本沒有開火。jQuery綁定在按鍵上不能觸發

HTML

<fieldset class="IOPS-field"> 
    <legend>IOPS/Bandwidth</legend> 
    <table> 
     <tr> 
      <td> 
       <input type="radio" name="bandwidth" value="IOPS-block" checked>IOPS at Block Size: 
      </td> 
      <td> 
       <input type="text" name="IOPS" id="IOPS" value="500000" size="3"> at 
       <select id="block-size"> 
        <option value="4096" selected>4K</option> 
        <option value="8192">8K</option> 
        <option value="16384">16K</option> 
        <option value="32786">32K</option> 
        <option value="65536">64K</option> 
       </select> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="radio" name="bandwidth" value="pure-bandwidth">Bandwidth (GBps): 
      </td> 
      <td> 
       <input type="text" name="bandwidth-entry" value="1953.125" id="bw" size="6"> 
      </td> 
     </tr> 
    </table> 
</fieldset> 

的jQuery/JavaScript的

function iops_bw_update(toUpdate) { 
     var iops = parseInt($("#IOPS").val()); 
     var block = parseInt($("#block-size").val()); 
     var bw = parseFloat($("#bw").val()); 

     if (toUpdate == "BW") { 
      $("#bw").val((iops*block)/1048576); 
     } 
     else { 
      $("#IOPS").val((bw*1048576)/block); 
     } 
} 

$(document).ready(function(){  
    $("#IOPS").bind("keypress", iops_bw_update("BW")); 
    $("#bw").bind("keypress", iops_bw_update("IOPS")); 
    $("#block-size").bind("change", iops_bw_update("BW")); 
}); 
+0

請嘗試使用.on而不是綁定,因爲綁定被棄用最新的jQuery版本 – Balder

+0

@Balder它沒有說任何關於它被棄用在http://api.jquery.com/bind/ – Barmar

+0

對不起,你是正確的生活的一個棄用! – Balder

回答

1

您需要通過功能REF而不是傳遞函數的值。

$("#IOPS").bind("keypress", your_function); // note: no() when no params need to be passed! 

的使用參數結合的處理程序正確的方法是:

$(document).ready(function(){  
    $("#IOPS").bind("keypress", function() { 
     iops_bw_update("BW"); 
    }); 
    $("#bw").bind("keypress", function() { 
     iops_bw_update("IOPS"); 
    }); 
    $("#block-size").bind("change", function() { 
     iops_bw_update("BW"); 
    }); 
}); 
+0

這工作完美!非常感謝!我可以在5分鐘內接受。 – 99ProblemsAndTheyreAllCode

0

您沒有約束的功能。你已經叫它。

嘗試這樣的:

$(document).ready(function(){  
    $("#IOPS").bind("keypress", iops_bw_update); 
    $("#bw").bind("keypress", iops_bw_update); 
    $("#block-size").bind("change", iops_bw_update); 
}); 
+0

我更新了代碼以直接調用函數,bind並沒有給我我正在尋找的行爲。仍然沒有開火。 – 99ProblemsAndTheyreAllCode

+0

你又犯了同樣的錯誤。綁定時使用括號調用函數。像這樣:'$(「#IOPS」)。keypress(iops_bw_update);' – Vikash

+0

在iops_bw_update裏面,您可以使用this.id來檢查哪個輸入字段已經觸發了該函數。 – Vikash

0

在JavaScript的()指在調用函數。如果你想綁定的功能,你只需要把功能名稱,如下所示:

$(document).ready(function(){  
    $("#IOPS").keypress(iops_bw_update); 
    $("#bw").keypress(iops_bw_update); 
    $("#block-size").change(iops_bw_update); 
}); 

你不需要把完整的功能放在綁定。只有沒有()的名字。