【问题标题】:How to use event delegation?如何使用事件委托?
【发布时间】:2014-03-16 04:59:14
【问题描述】:

从下拉框中选择时,我从 2 个不同的 ajax 脚本加载了 2 个 <span>s;所以我的代码是这样的:

<span id='room_rate'>1, 000</span> // loaded by an ajax script
<span id='total_misc'>500</span> // loaded by another ajax script

<input type='text' id='total'/>

<button type='button' id='compute_total'>Compute</button>

问题:

如何使用事件委托从2个&lt;span&gt;中获取值并在点击compute button后显示在input text total中?


我尝试过的:

$(document).ready(function () {
    $(this).on('click', 'span', function () {
        var room_rate = $('#room_rate').val();
        var total_misc = $('#total_misc').val();

        alert(room_rate + total_misc);
    });
});

我得到了什么:

我没有收到警报,也没有在控制台中收到错误 (F12)。

【问题讨论】:

标签: javascript jquery ajax jquery-events delegation


【解决方案1】:

阅读很好手册...

.val()

.val()方法主要用于获取inputselecttextarea等表单元素的值。

你可能想要.text()

我还将委托添加到您的按钮,而不是跨度,即

$(document).on('click', '#compute_total', function(e) {
    e.preventDefault();

    $('#total').val($('#room_rate').text() + $('#total_misc').text());
});

【讨论】:

  • 警报仍然必须带有未定义或空值的权利
  • @ArunPJohny 我猜他们是在点击 button 但委托处理程序正在监听 span 点击
  • 我假设需要添加而不是字符串连接。如果是这样,您需要将字符串转换为数字。
  • 试过你的代码先生,但我仍然无法得到警报
  • .text().replace(/[^\d\.]/g, "")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多