2017-01-22 78 views
1

我有我完全由javascript創建的表和我的jquery代碼不想使用它︰/如果我使用它創建manualy(在html中)表上我工作得很好。看下面的小提琴。jquery不能在桌面上創建javascript

FYI這個jQuery代碼應該只是alow用戶使用箭頭鍵輸入之間的導航(表格單元格)

這裏是jsFiddle

我打開我的腳本頭:

<head> 
    <meta charset="UTF-8"> 
    <title>My Page</title> 
    <link rel="stylesheet" type="text/css" href="css/stylesheet.css"> 
    <script type='text/javascript' src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <script type="text/javascript" src="js/jquery.js"></script> 
    <script type="text/javascript" src="js/js.js"></script> 
    </head> 

此處創建表格(在主體中):

<div id="myTable"> 
    </div> 
    <script type="text/javascript"> 
    createTable(); 
    addPerson(1); 
    </script> 

這是我的jQuery:

$(document).ready(function() { 

    $('input').keydown(function(e) { 
     if (e.keyCode == 40 || e.keyCode == 13) { 
      var thisClass = $(this).parent().attr('class'); 
      $(this).parent().parent().next('tr').children('.' + thisClass).children().focus(); 
     } 
    }); 

    $('input').keydown(function(e) { 
     if (e.keyCode == 39) { 
      $(this).parent().next('td').children('input').focus(); 
     } 
    }); 

    $('input').keydown(function(e) { 
     if (e.keyCode == 38) { 
      var thisClass = $(this).parent().attr('class'); 
      $(this).parent().parent().prev('tr').children('.' + thisClass).children().focus(); 
     } 
    }); 

    $('input').keydown(function(e) { 
     if (e.keyCode == 37) { 
      $(this).parent().prev('td').children('input').focus(); 
     } 
    }); 
}); 

回答

3

您只將事件偵聽器連接到現有元素。你應該將它連接到文件處理動態創建的元素:

$(document).on('keydown', 'input', function(e) { 
    // keycode first 
    if (e.keyCode==40 || e.keyCode==13) { 
    } 

    // keycode second etc. 
    if (e.keyCode==39) { 
    } 

    if (e.keyCode==38) { 
    } 

    if (e.keyCode==37) { 
    } 
}); 

UPD實際上它是一個壞主意,聽者連接到一個文件,如果它是非常大的。您可以在創建元素後將偵聽器附加到元素。

+0

你爲什麼用這麼多聽衆?只使用一個。 –

+0

感謝它現在的作品。我使用這麼多的聽衆,因爲我是不好的程序員;)感謝這一點,我會修復它,當我學習如何:) – Hovadko

+0

看看更新的答案。 –

0

你可能試圖創建表之前的​​綁定事件。請嘗試使用on方法。

您還需要將事件附加到創建表之前存在的現有父元素,例如在正文或其他父元素中。

$('body').on('keydown', "input", function(e) { 
    if (e.keyCode==40 || e.keyCode==13) { 
     var thisClass = $(this).parent().attr('class'); 
     $(this).parent().parent().next('tr').children('.'+thisClass).children().focus(); 
    } 
}); 

以此爲例。我建議你使用另一個包裝元素,並通過它的類或id綁定,而不是元素名稱。