2013-02-28 203 views
0

我想用1个输入或select和1个选择字段克隆一行。 取决于第一个选择的值,它应该将第二个更改为输入或选择字段。它适用于父级,但不适用于克隆。jQuery添加输入字段并处理选择更改事件

jQuery("body").delegate("p", "click", function(){ 
     var $tr = jQuery(this).closest('.tr_clone'); 
     var $clone = $tr.clone(); 
     $tr.after($clone); 
    }); 
    jQuery('.art_der_fahrt').hide(); 
    jQuery('.wert_input').show(); 
    jQuery(".fahrtenbuch_aenderungen").change(function() { 
       if(jQuery(this).val() == '52') { 
        jQuery(this).parent('td').next('td').children(".art_der_fahrt").show(); 
        jQuery(this).parent('td').next('td').children('.wert_input').hide(); 
       } 
       else { 
        jQuery(this).parent('td').next('td').children(".art_der_fahrt").hide(); 
        jQuery(this).parent('td').next('td').children('.wert_input').show(); 
       } 

      }); 

<td> 
    <select class="fahrtenbuch_aenderungen" name="fahrtenbuch_aenderungen"> 
     <option></option> 
     <option value="24">Fahrtziel</option> 
     <option value="23">Besuchte Personen/Firmen/Objekte</option> 
     <option value="3">Fahrer</option> 
     <option value="52">Art der Fahrt</option> 
     <option value="14">Fahrzeugstandort</option> 
     <option value="111">Fahrtzweck</option> 
    </select> 
</td> 
<td> 
    <input value="" class="wert_input" name="wert" type="text"> 
    <span class="art_der_fahrt"> 
     <select tabindex="111" class="test" name="select"> 
      <option></option> 
      <option value="Dienstfahrt">Dienstfahrt</option> 
      <option selected="selected" value="Wohnung">Wohnung</option> 
      <option value="Bereitschaft">Bereitschaft</option> 
      <option value="3">Fahrer</option> 
      <option value="52">Privatfahrt</option> 
      <option value="Familienheimfahrt">Familienheimfahrt</option> 
     </select> 
    </span> 

</td> 
<td colspan="2"> 
<p>Click me!</p> 
</td> 

回答

1

要绑定的变化听众 -

jQuery(".fahrtenbuch_aenderungen").change(function() { 

- 当时只有一个select元素。只有那个元素才会有侦听器。这里需要使用代表以及:

jQuery("body").delegate(".fahrtenbuch_aenderungen", "change", function() { 

使用.delegate这里,因为你已经在自己的帖子中使用它的意义,假设的jQuery的旧版本。正如其他人指出的那样,如果可用,您应该更喜欢.on

Demo

+0

酷!非常感谢 – 2013-02-28 10:06:17

2

使用.on

jQuery(document).on("click", "p", function(){ 

jQuery(".fahrtenbuch_aenderungen").on('change',(function() { 

因为已经。对替代.live.bind.delegate。 和。上也比其他快.. http://jsperf.com/bind-vs-live-vs-delegate-vs-on/5

+0

这应该是一个评论,因为它不能解决问题。 'delegate'可能会比较慢,但它*工作*,所以改成'on'在这里不会解决任何问题。 – 2013-02-28 09:54:30

+0

更好。 Downvote删除。 – 2013-02-28 10:02:47

+0

@DavidHedlund thanx队友 – 2013-02-28 10:05:09

-1

使用 “上” 下

$("td > p").on("click", function(){ 
    // your code here 
}); 

可以绑定事件动态生成DOM

+0

是的,但不能使用您发布的代码。事件监听器只会绑定到代码中现有的“p”标签。有关如何使用'on'使用委派事件的示例,请参阅Parmar的答案。 – 2013-02-28 09:58:44