2010-02-02 79 views
1

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

例如,当页面呈现时,它会显示一个INPUT框,用户可以在其中输入一个数字。有一个“添加”链接,可以克隆具有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标记功能:

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

任何th在如何完成?

感谢您的帮助。

+1

恩,谢谢...新网站...不知道这是有事可做。我通常只是回答我的感谢评论。我会开始做你告诉我如何做帕特里克的。 – Ronedog 2010-02-02 18:50:16

回答

1

当您克隆输入时,您是否在呼叫中添加'true'?这也会克隆这些事件。

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

帕特里克,非常感谢。我正在使用.clone(),但通过添加.clone(true)它完美地工作!再次感谢! – Ronedog 2010-02-02 19:00:03

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> 
0

您应该使用jQuery的生活()函数,该函数获得动态添加到DOM

元素

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

+0

正在从具有附加事件的元素克隆元素,因此不需要live()。相反,.clone(true)在这种情况下使用。 – user113716 2010-02-02 18:02:13