【问题标题】:Jquery Change value on multiple eventsJquery更改多个事件的值
【发布时间】:2016-03-09 23:41:00
【问题描述】:

我想计算选中的复选框和文本框中的单词,并从两者中创建一个新变量。

我所做的是: 两者分开工作。 我想在文本框事件中访问 len 变量,然后将当前的数量 + 复选框相加。

<h2>Moods</h2>
        <input type="checkbox" name="mood[]">Optimistic
        <input type="checkbox" name="mood[]">Cheerfull

    <textarea id="readscript" cols="60" rows="10" placeholder="Enter Read Text here" required></textarea>

这是 jsfiddle 解释和展示我所做的事情:https://jsfiddle.net/wqoynasu/5/

谢谢!!

【问题讨论】:

  • 请将您的小提琴的基本代码添加到您的问题中

标签: javascript jquery events scope


【解决方案1】:

我错了,因为只有在 unfocus 时才会在 textarea 上运行更改事件。我认为最好的解决方案是使用两个事件处理程序将它们发送到您的函数 -

$('textarea').keyup(function(event){
     yourFunc();
});

$('input').change(function(event){
     yourFunc();
});

【讨论】:

    【解决方案2】:

    我建议您在文本框更改事件中再次计算 len。无需更新全局变量。当你需要它时,你总是可以这样检索它:

    var len =  $("input[name='mood[]']:checked").length;
    

    或者你将这段代码包装在一个函数numberOfCheckedCheckboxes()中。

    您的脚本也有错误。 ifs 的级联中的第一个总是落到第二个(0 总是 else if。

    更新:我建议您创建一个 update() 函数,该函数会执行两个部分的计算并在文本或复选框更改时触发。

    【讨论】:

    • 嗨@lex82,感谢您的回复。我也想过这个,但我认为这不是一个好方法,如果用户先写文本然后检查复选框怎么办?
    • 我建议您创建一个 update() 函数,该函数执行两个部分的计算,并在文本或复选框更改时触发。
    • 谢谢。我懂了。我不太擅长 Jquery。我理解你说的逻辑。能举个小例子吗?
    • 好吧,我假设您可以编写基本的 Javascript 函数。因此,按照建议编写一个名为 numberOfCheckedCheckboxes() 的代码。编写另一个名为 updatePrice() 的函数,其中包含当前价格计算并使用第一个函数。然后在复选框更改或输入更改时调用 updatePrice()。 IE。从两个事件处理程序中调用它。
    【解决方案3】:

    您可以将以下 sn-ps 添加到您的代码中。

    $(':checkbox').change(function() {
            $('#readscript').trigger('input');
        });
    

    并且在 readscript 的 on-input 事件中使用以下内容。

    if (c.words == 0) {
              $ammount = 0 + $("input[name='mood[]']:checked").length;
                $price.html($ammount);
            }
            if (c.words <= 80) {
              $ammount = 10 + $("input[name='mood[]']:checked").length;
                $price.html($ammount);
            }
            if (c.words > 80 && c.words <= 200) {
            $ammount = 15 + $("input[name='mood[]']:checked").length;
                $price.html($ammount);
            }
            if (c.words > 300 && c.words <= 400) {
              $ammount = 20 + $("input[name='mood[]']:checked").length;
                $price.html($ammount);
            }
    

    希望这会有所帮助。

    【讨论】:

    • 嗨@Ananthaprakash 感谢您的回复,我试过了,但没有任何反应。在任何情况下,价格都保持为零。你能为此编辑或创建一个jsfiddle吗?
    • 谢谢@Ananthaprakash,再试一次,这正是我所期待的 :) 再次感谢!!
    【解决方案4】:

    您可以对所有类型的输入使用事件处理程序,检查其类型,然后将其相应地传递给您的函数。

    $('input, textarea').change(function(event){
       alert(event.target.type) // This checks the input type
    })
    

    【讨论】:

    • 嗨@itzhak 我试过这个。什么都没有发生。没有警报出现,我删除了所有代码并执行了此操作。仍然没有警报。
    • 嗨@Abrar,我添加了另一个有效的答案,检查了它:) 希望这有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多