JavaScript несколько входов onChange - PullRequest
0 голосов
/ 30 марта 2012

У меня проблема.В приложении на основе Zend Framework есть корзина покупок (показана в виде таблицы).Каждый ряд - это товар в корзине.Каждая строка имеет два поля формы: количество и значение (= цена * количество).

Я хочу изменить значение на количество (цена * количество) с событием onChange с JavaScript, но я не знаю, как это сделать с числом строк> 1. Входные данные приведены в цикле foreach в представлении Zend.

Есть ли в JavaScript универсальный алгоритм для решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 31 марта 2012

для каждого вы можете использовать

$(this).index()

* 1004 например *

$("#jieguo_qian table tr:nth-child(4) td").each(function(){
    var tindex = $(this).index() + 1;

так что вы можете получить тот же тд в diff tr

th    th    th
td    td    td
td    td    td
0 голосов
/ 30 марта 2012

Имеется ли в каждом поле значения, например, атрибут ID, который может быть получен из идентификатора поля количества?Если так, то это довольно быстро и безболезненно.Дано:

<table id="basket">
    <tr class="basket-row">
        <td class="basket-quantity">
            <input type="text" id="product1234_quantity">
        </td>
        <td class="basket-subtotal">
            <input type="hidden" id="product1234_unitprice" value="20">
            <input type="text" readonly="readonly" id="product1234_subtotal">
        </td>
    </tr>
    <tr class="basket-row">
        <td class="basket-quantity">
            <input type="text" id="product5678_quantity">
        </td>
        <td class="basket-subtotal">
            <input type="hidden" id="product5678_unitprice" value="30">
            <input type="text" readonly="readonly" id="product5678_subtotal">
        </td>
    </tr>
</table>

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

$('#basket').on('change','.basket-quantity input',function(e) {
    $('#'+this.id.replace('_quantity','_subtotal')).val(Number($('#'this.id.replace('_quantity','_unitprice')))*Number(this.value));
});

Если вы не можете получить идентификаторы из других идентификаторов, вам придется выполнить более сложные запросы DOM, но сутьво время выполнения обработчика вы должны выяснить, какой ввод вы обновляете.

Вы не указали, какую (если есть) платформу, которую вы используете.В простом JS это потребовало бы много дополнительного кода, чтобы сделать его кросс-браузерным совместимым, чтобы нормализовать присоединение и обработку событий.

...