2013-05-13 61 views
-1

基本上我有50行的表,每行有2個TD。一個用於輸入,另一個用於標籤,一切都是動態的。如何在包含50個文本框的表中獲取對當前文本框的引用?

請參閱該圖像 enter image description here

困境 用戶在文本框中輸入一個數字(我怎麼知道哪一個,如果我不想遍歷所有的人?)和回車鍵的事件我調用一個javascript函數,檢查它是否有效並將相應的消息添加到下一個tds標籤。 如何知道沒有循環所有文本框的輸入引用,因爲我在每個文本框輸入的輸入函數上調用該函數?

+1

表格是在HTML文件中創建的,還是用JS或其他東西動態生成的?它是什麼?你允許使用jQuery嗎? – 2013-05-13 18:38:08

+0

不是表格不是動態創建的,但是tit內容是用於ex錯誤信息的,我可以使用jquery – inputError 2013-05-13 18:39:11

+0

如果以下答案都不足以滿足您的要求,那麼您可能需要詳細詢問。 – Mindwin 2013-05-13 20:01:33

回答

1

以下鏈接的作品的形式,基於(有限的可用信息),但需要你處理驗證自己,明明:

function yourDefinedFunction(){ 
    // you need to handle the validating yourself, somehow. 
    return false; 
} 

/* binds the 'keypress' to the 'tr' elements, which 'listens' to see 
    if they take place on/in a 'td' element */ 
$('tbody tr').on('keypress', 'td', function(e){ 
    /* 'this' is the 'td' element, 
     'e.target' is the element within the 'td' that received the event 
    var cell = this, 
     target = e.target; 

    // if the key pressed is the enter key, *and* the target was the input, then: 
    if (e.which === 13 && target.tagName.toLowerCase() == 'input') { 

     // you determine whether the entry is valid, however you want: 
     var validity = yourDefinedFunction() || 'valid'; 

     // and set the text of the next 'td' element to reflect that validity: 
     $(cell).next('td').text(validity); 
    } 
}); 

JS Fiddle demo

參考文獻:

+0

正是我想要的。非常感謝 – inputError 2013-05-13 19:52:15

+0

你的確非常歡迎,我很高興得到了幫助!並感謝*您*接受! = d – 2013-05-13 19:53:55

0

很難給不知道具體你要怎樣做一個很好的例子,但像這樣的工作:

$('tr > td:first > input').keyup(function(e) { 
    //jQuery object representing the input box the user typed into 
    var input_box = $(this); 

    //get which key was pressed 
    var key_pressed = e.which; 
}); 
0

使用「改變」事件的TextBox,如:先加class='myTextboxClass'添加到您的文本框標記。

$(mytableselector).on('change','.myTextboxClass', function(){ 
    var me = this; // the one that changed 
    $(this).val();//value of that textbox 
}); 

設置同級文本:

$(mytableselector).on('change','.myTextboxClass', function(){ 
    var me = this; // the one that changed 
    $(this).val();//value of that textbox 
    $(me).parent('td').next('td').html('Invalid entry'); 
}); 
0
$("selector for table").on("keyup", "input[type=\"text\"]", function(ev) { 
    if (ev.which !== 13) { 
     return; 
    } 

    alert($(this).value()); 
}); 

Example

+0

沒有必要爲'input [type = \「text \」]'解釋器轉義,你已經被包裝在一個字符串中了,所以你只需要做'input [type = text]' – Ohgodwhy 2013-05-13 18:45:15

+1

[_Attribute values in選擇器表達式必須遵循W3C CSS選擇器的規則;一般來說,這意味着除有效標識符以外的任何內容都應該用引號括起來._](http://api.jquery.com/category/selectors/attribute-selectors/) – Andreas 2013-05-13 18:48:35

+0

@Ohgodwhy您說得對,值不**必須用引號括起來,但CSS標準是包含它們 - 'name =「value」'。這是真的沒有必要,但它是正確的,我也這樣做 – Ian 2013-05-13 18:51:29

0

如果使用上......事件,這將指向當前的輸入。 實施例:

<td> 
    <textarea onchange="foo(this)"> 
</td> 
<td> 
    Hello 
</td> 
... 
function (input) { 
    input.parentNode.nextSibling.innerHTML = input.value; 
} 

這個例子將在TD的值更改爲textarea的權利textarea的值。 (不是很健壯的代碼,但它只是一個例子。)

0
$("#tableID :text").keyup(function(e) { 
    if (e.which !== 13) { //check if the key pressed is Enter 
     return;   // if it is not, stop execution of code 
    } 
    var nextTD = $(this).closest('td').next(); 
    //your code goes after this line 
}); 

nextTD的聲明後,你可以插入你的代碼,你喜歡更新內容TD。

PS:我假設你的表是在例如下面

JSFiddle Example

相關問題