jquery帮助运行keyup事件

时间:2010-02-02 17:42:54

标签: jquery

我试图在文本框中总结值并将总和放在span标记中。我的功能正常(有点......)。我的问题是“KEYUP”事件不适用于在页面加载后添加的表单元素。

例如,当页面呈现时,它会显示一个输入框,用户可以在其中输入数字。有一个“添加”链接将克隆具有INPUT框的链接,从而允许用户添加他们想要的任意数量的元素。我正在使用class属性将所有输入框绑定在一起,因此我可以使用jqueries .each()对它们求和。

这是代码正在做的事情。如果我动态添加3或文本框,则keyup事件仅在页面呈现时最初在页面上的第一个INPUT框中执行...但是当我在此框中键入值时,动态创建的输入框中的数字得到他们应该总结一下。所以,它有点工作,但是我希望从动态输入框中触发keyup事件。

我正在使用jqueries“.after()”将元素添加到dom。

这是JQUERY代码:

$(document).ready(function() {

//ADD INCOME TOTALS
$('.'income_txt\').each(function() {


$(this).keyup(function(){calculateSum('income_total', 'income_txt');});
}); //end income totals

}); //end document ready

这是存储在.js文件中的函数

//CALCULATESUM function
function calculateSum(ele, classname) 
{
    var sum = 0;
    //iterate through each textboxes and add the values
    $("."+classname).each(function() {

        //add only if the value is number
        if(!isNaN(this.value) && this.value.length!=0) {
            sum += parseFloat(this.value);
        }

    });
    $("#"+ele).html(sum);

}

这是HTML MARKUP:

<input class="income_txt" type="text" name="income_value1" id="' . $property_id . '_income_value_id1" />

有关如何完成的任何想法?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

当您克隆输入时,是否在呼叫中添加“true”?这也将克隆事件。

$('.myElement').clone(true);

答案 1 :(得分:0)

每次动态添加新元素时,都需要为keyup事件注册:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(function() {
        $('input:text').keyup(calculateSum);
        $('a').click(function() {
            var newElement = $('<input type="text" />');
            $('#container').append(newElement);
            newElement.keyup(calculateSum);
            return false;
        });
    }); 

    function calculateSum() {
        var sum = 0;
        $('input:text').each(function() {
            var value = $(this).val();
            if(!isNaN(value) && value.length !== 0) {
                sum += parseFloat(value);
            }
        });
        $('span#result').html(sum);
    }
    </script>
</head>
<body>
<div id="container">
    <input type="text" />
</div>
<span id="result"></span>
<a href="#">Add element</a>

</body>
</html>

答案 2 :(得分:0)

您应该将jQuery live()函数用于动态添加到DOM的元素

http://api.jquery.com/live/