在jquery中绑定事件(点击时双重事件......)

时间:2011-02-28 11:28:10

标签: jquery user-interface binding

我正在创建一个税收计算器,并且在绑定事件方面存在一些问题。有五个领域:

  1. 文字字段。用户必须键入他的城市,脚本会为文本值指定一个数字。例如,您键入“New York”,当您单击“Go!”时,系统会为其指定0.1。
  2. 滑块。移动滑块时,字段中的数字会更改。
  3. 选择包含几个数值的框。
  4. 和5.您必须输​​入数字的简单文本框
  5. 所有这些字段都采用称为“taxcalculator”的形式。提交时,会触发一个名为“calculateum”的函数。问题是我必须使用jquery计算插件和名为“recalc”的函数将该总和用于另一个计算。所以,让我们假设某人填写了上述字段,但想要更改第一个字段中的某些数字或文本。我想重新计算每次更改的其他计算。我设法将选择框更改绑定到:

    $("[id=select_box_1]").bind("change", recalc);
    

    并使用类似代码更改滑块。

    然而,在两种情况下触发“重新计算”存在问题。

    1:单击“开始!”开始计算时按钮,只触发一个功能。当我点击“开始”按钮时,我想完成它,两个功能都被触发(calculateum和recalc)。但是,只触发“calculateum”,我必须使用“mousemove”或再次单击该按钮以使用其他功能。

    2:用户可以更改第一个字段中输入的城市。在这种情况下,数值会更改,但数字字段是隐藏的,我不知道用于触发“重新计算”功能的属性。我认为“改变”是合乎逻辑的选择,考虑到该领域的价值会发生变化,但它不起作用。

    以下是我的代码的一部分:

    <form id="taxcalculator" style="height:150px;" action="#" onsubmit="calculatesum(); return false">
    
    <input type="text" size="20" id="city" name="city" />
    
    <div id="slider"></div>
    </div>
    
    <div id="income_1" style="width:300px; margin:0 0 15px 0;">
    <select id="income_item_1" style="float:left; width:200px;">            
    <option value="0" selected="selected">0</option>        
    <option value="2.000">2.000</option>
    <option value="4.000">4.000</option>
    </select>
    </div>
    
    <input type="text" size="20" id="income2" name="income2" />
    <input type="text" size="20" id="income3" name="income3" />
    
    <input type="hidden" name="citytaxrate" id="citytaxrate">
    <input type="submit" name="submit" value="Go!" id="go-calc" class="ui-button">
    </div>
    </form>
    

    计算按此顺序进行:

    1. 用户在城市字段中输入的城市会分配一个数值,并在“citytaxrate”字段中提取该值
    2. 所有值(“citytaxrate”除外)使用“calculateum”函数求和,点击“Go!”触发按钮
    3. 总和用于“recalc”函数,该函数使用总和,citytaxrate值和我手动插入脚本中的其他两个值。
    4. 主要问题是如何在同一次点击时触发这两个功能。即使在HTML中我也可以使用

      onsubmit="calculatesum(), recalc(); return false"
      

      但是,首先单击(提交)仅触发“calculateum”功能,另一次单击将触发“recalc”功能。

2 个答案:

答案 0 :(得分:2)

好吧,如果你想将两个方法绑定到同一个事件,你可以简单地将它们放在一个方法中并调用它。我从来没有将两种方法绑定在一起,所以不能评论为什么双重绑定失败。

$("#select_box_1").change(theCommonMethod);

function theCommonMethod() {
   recalc();
   calculatesum();
}

如果你在jsfiddle.net上提供了一些代码示例,我们也可以帮你解决第二个问题。

编辑

更新后,我发布了一个基本的小提琴,其中包含您想要绑定的大多数事件。看看这个:http://jsfiddle.net/jomanlk/v5mRe/1/

只需使用jQuery选择器获取所需的值,然后进行计算并更新文本字段。

答案 1 :(得分:0)

更改控件时更改仅获取触发器(从一个文本框切换到其他文本框时)。如果文本框的内容发生更改,则不会触发它。

在city字段中使用keyup或keydown触发器来触发recalc函数。