2010-03-31 88 views
0

請幫忙!jquery問題:minipulating val()屬性元素

我有一個div某種形式的元素在頁面上:使用jQuery我想借#template的副本,操縱的輸入值和#template後插入

<div id="box"> 
    <div id="template"> 
     <div> 
     <label for="username">Username</label> 
     <input type="text" class="username" name="username[]" value=""/> 
     <label for="hostname">hostname</label> 
     <input type="text" name="hostname[]" value=""> 
     </div> 
    </div> 
</div> 

所以結果看起來是這樣的:

<div id="box"> 
    <div id="template"> 
     <div> 
     <label for="username">Username</label> 
     <input type="text" class="username" name="username[]" value=""/> 
     <label for="hostname">hostname</label> 
     <input type="text" name="hostname[]" value=""> 
     </div> 
    </div> 
     <div> 
     <label for="username">Username</label> 
     <input type="text" class="username" name="username[]" value="paul"/> 
     <label for="hostname">hostname</label> 
     <input type="text" name="hostname[]" value="paul"> 
     </div> 
</div> 

我可能要對這個錯誤的方式,但在頁面上螢火蟲的JavaScript代碼運行下面的測試位似乎沒有改變的輸入值。

var cp = $('#template').clone(); 

cp.children().children().each(function(i,d){ 
    if(d.localName == 'INPUT'){ 
     $(d).val('paul'); //.css('background-color', 'red'); 
    } 
    }); 
$("#box").append(cp.html()); 

雖然如果我取消註釋「//.css('background-color','red');」輸入將變成紅色。

回答

0

我稍微修改了你的HTML,通過給主機名輸入分配一個「主機名」類。 下面是更新HTML:

<div id="box"> 
    <div id="template"> 
     <div> 
      <label for="username">Username</label> 
      <input type="text" class="username" name="username[]" value=""/> 
      <label for="hostname">hostname</label> 
      <input type="text" class="hostname" name="hostname[]" value=""> 
     </div> 
    </div> 
</div>​​​ 

下面是一個JS:

$(function() { 
    $('#template div:first').clone().appendTo("#box"); 
    $('#box div:last .username').val("Paul"); 
    $('#box div:last .hostname').val("google"); 
}); 

此外,您可能想借此在http://wiki.github.com/nje/jquery/jquery-templates-proposal

+0

謝謝!這正是我所期待的。 – P4ul 2010-03-31 21:14:39

1

爲什麼不直接使用輸入元素選擇與克隆作爲根像這樣:

$("input", cp).val("paul"); 

而不是使用到children的電話?

編輯:它看起來像作爲jQuery 1.4,當你調用clone,也應該複製的元素,而不是僅僅標記的數據。這可能會解決您直接複製值的問題。相關文檔(重點介紹):

withDataAndEventsA指示是否應該將事件處理程序與元素一起復制的布爾值。 從jQuery 1.4元素數據也將被複制。

+0

喜R0MANARMY看jQuery的模板建議,感謝您的幫助,我不知道你可以傳遞一個上下文作爲$()的第二個參數。 但我試圖使用這種方法,並不能讓它工作,價值沒有設置在新插入的輸入?使用 var cp = $('#template')。clone(); $(「input」,cp).val(「paul」); $(「#box」)。append(cp.html()); 歡呼聲, – P4ul 2010-03-31 21:10:24