2013-07-25 62 views
0

關於此主題還有很多其他線程,但它們都不能解決我的問題。我試圖從我剛剛插入的輸入字段獲取值。我用這條線的JavaScript的插入我的輸入框:JQuery在點擊事件中獲取輸入框的值

processName.innerHTML = '<input type="text" id="ProcessNameChange" value="' + oldName + '" >';` 

然後我嘗試使用訪問它:

var newName = $(this).closest("#ProcessNameChange").val(); 

上述這些問題都包裹在一個事件,一個按鈕單擊事件。如果你喜歡它,下面是整個功能。另外,如果您有更好的編寫代碼的方法,請隨時分享。

$('.Edit').click(function() { 
      if ($(this).attr("id") != "submitUpdate") { 
       $(this).attr("id", "submitUpdate"); 
       $(this).text("Submit"); 
       var closestTR = $(this).closest("tr"); 
       var processName = closestTR.children()[2]; 
       var processDescription = closestTR.children()[3]; 
       var processID = closestTR.children()[4]; 
       var oldName = processName.innerHTML; 
       var oldDesc = processDescription.innerHTML; 
       processName.innerHTML = '<input type="text" id="ProcessNameChange" value="' + oldName + '" >'; 
       processDescription.innerHTML = '<input type="text" id="ProcessDescChange" value="' + oldDesc + '" > '; 
       submitButtonClick(); 
      } else { 
       var newName = $(this).closest("#ProcessNameChange").val(); 
       var newDesc = $(this).closest("#ProcessDescChange").val(); 
       var processID = $(this).closest("tr").children()[4]; 

      } 

- >相關評論: 的輸入框中輸入HTML始終保持如下圖所示:它是通過比用JavaScript修改的中繼器全部採用。

<tr> 
<td class="grid-main-detail"></td> 
    <td> 
     <input id="ProcessNameChange" type="text" value="PNameOld"> 
    </td> 
    <td> 
     <input id="ProcessDescChange" type="text" value="PDescOld"> 
    </td> 
    <td> 
    <td>3547556300824952452</td> 
    <td>Me </td> 
    <td>7/19/2013 2:32:48 PM</td> 
</tr> 

謝謝!

+1

除非你的.edit類在你的輸入裏面,而不是基於你的js,否則最接近的是不會工作的。 http://api.jquery.com/closest/ – Huangism

+0

@黃色,HTML在輸入框中永遠不會改變。一旦我插入它,它始終是 - 甚至在我改變它之後。 – gbam

回答

2

您使用的是最接近的選擇不正確

看到這個小提琴

http://jsfiddle.net/Td6Wx/3/

<div class="test"></div> 
<a href="#" class="test2">asdasdas</a> 

最接近()(http://api.jquery.com/closest)通過它的祖先向上行進,你的情況.Edit不是孩子的輸入當然是無效的。如果你發佈你的html結構,我們可以提供一個正確的解決方案

+0

謝謝!另外,這與下面的Blurfus的答案有關。如果我添加一個ProcessNameChange的第二個實例,它不能有相同的ID,所以JavaScript會保留它還是有可能插入它不正確? – gbam

+0

我使用類而不是1,如果你有超過1,我沒有看到.Edit是在你的HTML,你能澄清嗎? – Huangism

0

我建議擺脫innerHTML,以保持專注於jQuery方法,如.append()$()來創建元素。除此之外,我想你正在尋找td tr的孩子。

var oldName = processName.text(); 
var oldDesc = processDescription.text(); 
processName.append($('<input type="text" id="ProcessNameChange" value="' + oldName + '" >')); 
processDescription.append($('<input type="text" id="ProcessDescChange" value="' + oldDesc + '" > ')); 

希望這有助於

R.

1

一個問題:你爲什麼要訪問輸入的值一樣

var newName = $(this).closest("#ProcessNameChange").val(); 

代替:

var newName = $("#ProcessNameChange").val(); 

由於該項目是唯一的(憑藉其id屬性),因此我不認爲有必要使用.closest()來獲取它(及其值)。

你真的需要以這種方式選擇輸入字段嗎?

+0

由於我通過javascript添加了值,所以恐怕值可能不是唯一的。真的嗎? – gbam

相關問題