2012-01-30 29 views
0
<table id="ratecardlist"> 
    <tr> 
     <th> Show Time</th> 
     <th> Balcony </th> 
     <th> Box </th> 
     <th> &nbsp; </th> 
    </tr> 
    <tr> 
     <td>10.30AM</td>   
     <td><input type="text" name="bal:1:3" value="100" /> </td> 
     <td><input type="text" name="box:1:5" value="200" /> </td> 
     <td><a href="#" onClick="applytoAll();">Apply To All</a></td> 
    </tr> 
    <tr> 
     <td>1.30PM</td>   
     <td><input type="text" name="bal:3:3" value="400" /> </td> 
     <td><input type="text" name="box:3:5" value="450"/> </td> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
     <td>6.30PM</td>   
     <td><input type="text" name="bal:5:3" value="600" /> </td> 
     <td><input type="text" name="box:5:5" value="600" /> </td> 
     <td>&nbsp;</td> 
    </tr> 
     . 
     . 
     . 
</table> 

應用於所有鏈接將始終在第二行。當我單擊應用於全部時,此行中的輸入值應複製到其他行輸入字段。如何做到這一點幫助。如何將所有數據連續複製到所有其他行

例如 後點擊應用到所有,

<table id="ratecardlist"> 
    <tr> 
     <th> Show Time</th> 
     <th> Balcony </th> 
     <th> Box </th> 
    </tr> 
    <tr> 
     <td>10.30AM</td>   
     <td><input type="text" name="bal:1:3" value="100" /> </td> 
     <td><input type="text" name="box:1:5" value="200" /> </td> 
     <td><a href="#" onClick="applytoAll();">Apply To All</a></td> 
    </tr> 
    <tr> 
     <td>1.30PM</td>   
     <td><input type="text" name="bal:3:3" value="100" /> </td> 
     <td><input type="text" name="box:3:5" value="200"/> </td> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
     <td>6.30PM</td>   
     <td><input type="text" name="bal:5:3" value="100" /> </td> 
     <td><input type="text" name="box:5:5" value="200" /> </td> 
     <td>&nbsp;</td> 
    </tr> 
     . 
     . 
     . 
</table> 
+0

你嘗試過什麼嗎?你遇到什麼問題? – 2012-01-30 10:57:45

+0

@FrédéricHamidi我嘗試了幾件事,但沒有得到結果。我使用了克隆方法,但它不起作用,因爲顯示時間值不能更改,只有輸入字段值應該被替換。 – Sara 2012-01-30 11:03:47

+0

您的標記有瑕疵。使用類名來引用相似的元素(blacony輸入和框輸入),爲什麼有一個整列與' '? – 2012-01-30 11:05:35

回答

2

首先,你處理click事件不會提供足夠的情況下(例如在點擊的元素)的處理方式。理想情況下,您可以用idclass屬性來修飾鏈接,並使用該屬性不加區分地註冊處理程序(例如,通過jQuery的click()方法)。

如果你堅持你目前的策略,你至少應該在點擊的元素傳遞到處理程序:

<a href="#" onClick="applyToAll(this);">Apply To All</a> 

從那裏,你可以實現的功能如下:

function applyToAll(element) 
{ 
    // Build an array with the values of this row, in document order. 
    var $row = $(element).closest("tr"); 
    var values = $row.find("input:text").map(function() { 
     return $(this).val(); 
    }).get(); 

    // Apply the values to the other rows. 
    $row.nextAll().each(function() { 
     $(this).find("input:text").each(function(index) { 
      $(this).val(values[index]); 
     }); 
    }); 
} 

該解決方案每行支持任意數量的輸入元素,而不僅僅是兩個。

+0

你是最好的..非常感謝。 – Sara 2012-01-30 11:45:45

1

假設你正在使用jQuery:

$('#ratecardlist a').click(function(){ 
    var balVal = $(this).closest('tr').find('td[name^=bal]').val(); 
    var boxVal = $(this).closest('tr').find('td[name^=box]').val(); 
    $('#ratecardlist td[name^=bal]').val(balVal); 
    $('#ratecardlist td[name^=box]').val(boxVal); 
}); 
+0

如果這些列是隨機添加的,我該怎麼做。 – Sara 2012-01-30 11:19:36

+0

此功能適用於任意數量的行,它們遵循相同的標準,具有名稱以bal和box開頭的輸入。 – 2012-01-30 11:20:47

+0

@AndréAlçadaPadezyes是的這是工作正常。但問題是如果列隨機添加如何解決這個問題。 – Sara 2012-01-30 11:25:09

1
$(function(){ 
    $('#applyToAll').click(function(){ 
     var ctx = $(this).closest('tr'); 
     $('input[name^="bal"]').val($('input[name^="bal"]', ctx).val()); 
     $('input[name^="box"]').val($('input[name^="box"]', ctx).val()); 
     return false; 
    }); 
}); 

這裏是code demo

1

這是原油,但應該工作:

function applyToAll() 
{ 
var bal_val = this.parentNode.parentNode.childNodes[1].childNodes[0].value; 
var box_val = this.parentNode.parentNode.childNodes[2].childNodes[0].value; 
var inps = this.parentNodes.parentNode.parentNode.getElementsByTagName('input'); 

for (i=0; i<inps.length; i++) 
{ 
    inp = inps[i]; 
    inp.value = bal_val; 
    inp = inps[i+1]; 
    inp.value = box_val; 
    i++; 
} 
} 
相關問題