JQuery умножение не работает для меня

0

Я пытаюсь умножить значение внутри двух div и помещать продукт в третью, и я терпеть неудачу. Я попытался следовать методам в предыдущем вопросе здесь, но он, кажется, не работает для меня.

В частности, у меня есть элементы "добавить" и "вычесть", чтобы изменить количество строк и столбцов (для работы с ними позже). Я пытаюсь получить количество ячеек (строк * столбцов) для автоматического обновления при изменении любого из других.

здесь скрипка. Код, который я использую:

<table id="controls">
<tr><td>Rows:</td><td><input type="button" value="+" onclick="javascript:appendRow()" class="append_row"/><input type="button" value="-" onclick="javascript:deleteRow()" class="delete"/></td><td class="numbers" id="numRows">2</td></tr>
<tr><td>Columns:</td><td><input type="button" value="+" onclick="javascript:appendColumn()" class="append_column"/><input type="button" value="-" onclick="javascript:deleteColumn()" class="delete"/></td><td class="numbers" id="numColumns">2</td></tr>
<tr>
<td colspan="2">Total cells:</td><td class="numbers" id="rc-product"></td></tr>
</table>

$('#controls').keyup(function(){
var rows_val = $('#numRows').val();
var columns_val = $('#numColumns').val();
$('#rc-product').val( rows_val * columns_val);
});

Но ничего не отображается. Должен ли я использовать parseInt и text()? Как?

  • 0
    Вы пытались установить точки останова и посмотреть, есть ли значения? Вы пытались переместить умножение за пределы задания? Я бы познакомился с отладчиком (я использую F12 в Chrome), поскольку он делает жизнь в мире JS намного проще
  • 3
    вы можете использовать .html или .text, но не .val http://jsfiddle.net/gwv2n/6/
Показать ещё 1 комментарий
Теги:
multiplication

3 ответа

1

Используйте click(), поскольку вы используете мышь, а не клавиши клавиатуры. Кроме того, val() относится только к элементам input и textarea. Использовать text():

$('#controls').click(function () {
    var rows_val = parseFloat($('#numRows').text()),
        columns_val = parseFloat($('#numColumns').text());
    $('#rc-product').text(rows_val * columns_val);
});

Демо-версия JS Fiddle.

Использование parseFloat() преобразует строку текста из элемента в число, которое может использоваться для математической операции (или NaN, если строка начинается с нечислового символа). Вместо этого можно использовать parseInt(), но это ограничивает вас целыми числами, тогда как parseFloat(), как следует из названия, также обрабатывает поплавки.

Чтобы обновить общее количество на странице-загрузке/готовой к документу, вы также можете использовать click() (без аргумента), чтобы вызвать событие click, которое будет ссылаться на ранее обработанный клик:

$('#controls').click(function () {
    var rows_val = parseFloat($('#numRows').text()),
        columns_val = parseFloat($('#numColumns').text());
    $('#rc-product').text(rows_val * columns_val);
});

Демо-версия JS Fiddle.

Рекомендации:

  • 0
    Большое спасибо! это делает трюк. У меня нет представителя, чтобы поддержать вас, но я бы сделал это, если бы мог.
  • 0
    Я рад, что помог! Этот ответ решил вашу проблему, однако, подумайте о том, чтобы принять его как ответ на ваш вопрос (отметив галочкой рядом с текстом). Или, если другой ответ помог вам больше, подумайте об этом. :)
0

Событие keyup запускается, когда вы отпускаете ключ на клавиатуре, поэтому, вероятно, это не то, что вы ищете. Чтобы вызвать функцию умножения при нажатии одной из ваших кнопок, вам нужно использовать событие click.

Кроме того, чтобы получить или установить внутреннее содержимое элемента DOM, вы должны использовать text (или html, если вы хотите также использовать HTML-теги внутри него), а не val.

$('#controls').on('click', 'input[type=button]', function() {
    var rows_val = $('#numRows').text();
    var columns_val = $('#numColumns').text();
    $('#rc-product').text(rows_val * columns_val);
});

Скрипт: http://jsfiddle.net/gwv2n/8/

Если вы хотите, чтобы ваша функция также была оценена в загрузке страницы, так что результат умножения уже будет отображаться при загрузке страницы, вы можете преобразовать ее в именованную функцию и запустить ее в событии $(document).ready.

function calculate() {
    var rows_val = $('#numRows').text();
    var columns_val = $('#numColumns').text();
    $('#rc-product').text(rows_val * columns_val);    
}

$('#controls').on('click', 'input[type=button]', calculate);
$(document).ready(calculate);

Скрипт: http://jsfiddle.net/gwv2n/12/

0

Хорошо, я думаю, я понимаю, в чем твоя проблема. Вы пытаетесь использовать $.val() для извлечения текста внутри div. $.val() возвращает атрибут value элемента ввода. Использование $.text() исправит это.

См. Обновленную скрипту: http://jsfiddle.net/gwv2n/10/

Вам также необходимо поместить всю вашу логику в функцию готовности документа, как показано ниже:

$(function() {
  $('#controls input[type="button"]').click(function(){
    var rows_val = $('#numRows').text();
    var columns_val = $('#numColumns').text();
    $('#rc-product').text( rows_val * columns_val);
    console.log(rows_val, columns_val);
  });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню