【问题标题】:Check if the button has changed in Javascript?检查按钮是否在 Javascript 中发生了变化?
【发布时间】:2013-06-25 10:38:00
【问题描述】:

我试图弄清楚如何让我的 Javascript 代码检查是否选择了按钮。如果有,我想显示按钮的值。

我有以下 HTML:

<li class="control-group">
        <label for="amount" class="control-label">Select an amount</label>
        <div class="controls">
            <div class="btn-group radioButtons amountButtons" data-toggle="buttons-radio">
                @if (Model.PresetValues.Count > 0){
                     foreach (int value in Model.PresetValues) {
                        <button type="button" data-value="@value" class="btn @(Model.chargeViewModel.ChargeAmount == value ? "active" : "")">$@value</button>
                     } 
                }                   
                <button type="button" data-value="other" class="btn toggleDiv toggleOnce" data-toggle-id="#manualAmount">Other</button>
            </div>               
            <input type="hidden" class="radioHidden validate required validateAmount" value="" id="amount" name="ChargeAmount">


        </div>
        <div class="controls hide resize" id="manualAmount">
            <div class="input-prepend input-append">
                <button class="btn minus" type="button"><i class="icon-minus"></i></button>
                <input class="span2 plusminus" data-max="100" data-min="10" data-increment="5" data-value="25" id="manualAmountInput" type="text" value="$25" disabled>
                <button class="btn plus" type="button"><i class="icon-plus"></i></button>
            </div>
        </div>
    </li>

这是我的两个按钮选项,我想编辑以下跨度

<span class="help-block">Your card will automatically reload $<span id="autoAmount">0</span> when your balance is lower than your reload threshold.</span>

我有以下脚本,我被认为会在单击时更改跨度的值,但我很难将它们连接在一起。

<script>
    javascript: void (document.getElementById("autoAmount").innerHTML = amount);
</script>

如果有人有任何建议或想法,将不胜感激。 谢谢!

【问题讨论】:

    标签: c# javascript html asp.net-mvc button


    【解决方案1】:

    稍微扩展一下kylo的答案...

    首先,您需要将点击事件绑定到您的按钮。您可以将其设置为 onClick 属性:

    <input type="button" onClick="captureAmount(e); return false;">
    

    在 captureAmount 中包含“e”会将点击事件本身传递给我们的函数,我们可以使用它来确定单击了哪个按钮(如果您在多个地方使用此函数)。

    如果您已包含该库,您也可以使用 jQuery 将函数一次附加到页面上的每个按钮。

    $('input[type=button]').click(captureAmount(e));
    

    或者,指定具有特定类的按钮..

    $('input.amountBtns').click(captureAmount(e));
    

    你的函数可能看起来像这样:

    function captureAmount(e){
      var clicked = e.target
      ,   clickedAmount = clicked.value
      ,   display = document.getElementById("autoAmount")
      ;
    
      display.innerHTML = clickedAmount;
    }
    

    【讨论】:

    • Hey Relic,我尝试使用以下方法,通过添加 &lt;button type="button" onClick="captureAmount(e); return false;" data-value="@value" class="btn @(Model.chargeViewModel.ChargeAmount == value ? "active" : "")"&gt;$@value&lt;/button&gt; 以及相同的 onClick 方法输入 class="span2 plusminus"
    • 我也使用下面的脚本 $('input.amountButtons', 'input.plusminus').click(captureAmount(e)); function captureAmount(e) { var clicked = e.target , clickedAmount = clicked.value , display = document.getElementById("autoAmount") ; document.getElementById("autoAmount").innerHTML = display.innerHTML = clickedAmount; } 不起作用,因为我得到错误 e 未定义,单击第一部分中的值时,& onclick 手动值 = 收到类型编号的 msg,预期为字符串
    • 如果您使用方法“$('input.amountButtons', 'input.plusminus').click”,您需要确保页面中包含 jQuery 库。您也不应该同时拥有这两者和 onClick 属性(选择一个或另一个)。此外,“input.amountButtons”针对的是按钮容器。您的点击事件应该只绑定到按钮本身。
    • 变量“clickedAmount”假定您希望从您单击的按钮获得的值是“值”数量。如果您将所需的值存储在“data-value”之类的自定义属性中,则该行应更改为 'clickedAmount = clicked.getAttribute("data-value")
    • 哦,好吧,我有一个问题,将以下 &lt;button type="button" data-value="@value" class="btn @(Model.chargeViewModel.ChargeAmount == value ? "active" : "")"&gt;$@value&lt;/button&gt; 更改为输入 $@value 因为最后一个尾随 $@value 没有括起来。
    【解决方案2】:

    如果您希望在单击按钮时更改 autoAmount 范围的 innerHTML,则需要将 onclick 事件绑定到该按钮,然后当 onClick 事件触发时,您将执行document.getElementById("autoAmount").innerHTML = amount.value

    例如,在按钮声明中,您可以添加 onclick="updateAmount()"

    然后在脚本标签中声明一个由 onclick 事件调用的 javascript 函数:

        function updateAmount(){
            document.getElementById("autoAmount").innerHTML = document.getElementById("amount").value
        }
    

    (请记住,您的“金额”输入框是隐藏的。)

    【讨论】:

    • 嗨 kylo 感谢您的回复!在我尝试之前我确实有一个问题,如果我从我的 html 的 manualAmount 部分获取金额,它如何识别金额?那是我还没有弄清楚的东西..
    • 让我看看我是否理解您的问题:您正在尝试使用 PresetValues 列表之一填充 0,除非用户在manualAmount,在这种情况下,manualAmount 应该覆盖 PresetValues?准确吗?
    • 要使函数更全局化,您可以使用 onclick="updateAmount(e)",然后在函数内部使用 e.target 选择被点击的对象
    • @kyllo 是的,这正是我想做的! :)
    • @relic180 所以基本上每个按钮都将 onclick 设置为 updateAmount(e) ,然后在 javascript 函数中调用 e.target?
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2019-03-25
    • 2015-01-15
    • 2015-05-28
    • 2021-04-08
    相关资源
    最近更新 更多