Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как написать onclick для всех кнопок в таблице кол-во которых меняется (https://javascript.ru/forum/events/30781-kak-napisat-onclick-dlya-vsekh-knopok-v-tablice-kol-vo-kotorykh-menyaetsya.html)

olberd 15.08.2012 16:49

Как написать onclick для всех кнопок в таблице кол-во которых меняется
 
Таблица
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>
<table width="444" border="1"><tr>
  
    <td width="214" rowspan="2">&nbsp;
    <div id="ctl00_MainContent_Info_ctl00_upd_small">  16500  </div>
    </td>
    <td width="214">&nbsp;
    <input name="ctl00$MainContent$Info$ctl00$Purchase1$txtPurchasePrice" type="text" maxlength="30" id="ctl00_MainContent_Info_ctl00_Purchase1_txtPurchasePrice" style="width:180px;text-align: center">
    </td>
  </tr>
  <tr>
    <td>&nbsp;
    <input type="submit" name="ctl00$MainContent$Info$ctl00$Purchase1$btnMakePurchase" value="Купить" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$Info$ctl00$MakePurchase1$btnMakePurchase&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="ctl00_MainContent_Info_ctl00_MakePurchase1_btnMakePurchase" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_MainContent_Info_ctl00_MakePurchase1_btnMakePurchase')" style="width:180px;">
    
    </td>
  </tr>
  
  <tr>
    <td width="214" rowspan="2">&nbsp;
    <div id="ctl00_MainContent_Info_ctl01_upd_small"> 10000 </div>
    </td>
    <td width="214">&nbsp;
    <input name="ctl00$MainContent$Info$ctl01$MakePurchase1$txtPurchasePrice" type="text" maxlength="30" id="ctl00_MainContent_Info_ctl01_MakePurchase1_txtPurchasePrice" style="width:180px;text-align: center">
    </td>
  </tr>
  <tr>
    <td>&nbsp;
    <input type="submit" name="ctl00$MainContent$Info$ctl01$MakePurchase1$btnMakePurchase" value="Купить" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$Info$ctl01$MakePurchase1$btnMakePurchase&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="ctl00_MainContent_Info_ctl01_MakePurchase1_btnMakePurchase" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_MainContent_Info_ctl01_MakePurchase1_btnMakePurchase')" style="width:180px;">
    </td>
  </tr>
</table>

<script type="text/javascript">
document.getElementById('ctl00_MainContent_Info_ctl00_MakePurchase1_btnMakePurchase').onclick = function()
    { 	var price1 = document.getElementById('ctl00_MainContent_Info_ctl00_upd_small');
       	var price2 = document.getElementById('ctl00_MainContent_Info_ctl00_Purchase1_txtPurchasePrice');
    	price2.value = price1.innerText; 
    }
</script>

</body>
</html>


Как сделать чтобы при нажатии на любую кнопку бралось значение из ряда слева которое находится в той же строке, что и кнопка.
ID элементов генерируются на чужой странице и кол-во строк с кнопками может меняться.

Вот мой скрипт, но он работает только на кнопке которую явно указываешь

<script type="text/javascript">
document.getElementById('ctl00_MainContent_Info_ctl00_MakePurchase1_btnMakePurchase').onclick = function()
    { 	var price1 = document.getElementById('ctl00_MainContent_Info_ctl00_upd_small');
       	var price2 = document.getElementById('ctl00_MainContent_Info_ctl00_Purchase1_txtPurchasePrice');
    	price2.value = price1.innerText; 
    }
</script>

Aetae 15.08.2012 17:20

Никогда не используйте только innerText, это не стандартный метод - 1раз, не работает в ff - два.

document.onclick = function(e){
  e = e? e.target : event.srcElement;
  if(e && e.id && e.tagName === 'INPUT' && e.type === 'text' && /_[^_]+_txtPurchasePrice/.test(e.id) ){
    e.value = document.getElementById(e.id.replace(/_[^_]+_txtPurchasePrice/,'_upd_small')).innerHTML;
  }
}

olberd 15.08.2012 18:42

Спасибо!!! А как сделать чтоб так работало при нажатии на кнопки btnMakePurchase, а то теперь мышью никак не выделить поле txtPurchasePrice

Aetae 15.08.2012 19:06

document.onmousedown = function(e){
  e = e? e.target : event.srcElement;
  if(e && e.id && e.tagName === 'INPUT' && e.type === 'submit' && /_[^_]+_btnMakePurchase/.test(e.id) ){
	(
		document.getElementById(e.id.replace(/_([^_]+)_btnMakePurchase/,'_$1_txtPurchasePrice')) ||
		document.getElementById(e.id.replace(/_Make([^_]+)_btnMakePurchase/,'_$1_txtPurchasePrice'))	
	).value = document.getElementById(e.id.replace(/_[^_]+_btnMakePurchase/,'_upd_small')).innerHTML
  }
}

olberd 15.08.2012 20:09

Огромное спасибо!

olberd 15.08.2012 21:14

Дико извиняюсь, а если в таблице еще одна колонка, отсюда уже данные по строкам уже не вытянуть? Это шаг на сколько уменьшать цену и он может меняться
<td style="font-size: 80%; white-space: nowrap; text-align: center">
				 300,00000</td>


Часовой пояс GMT +3, время: 16:14.