2014-01-14 41 views
0

我一直在努力,以更新第二天TD输入的值更改输入值,但没有成功..未能就选择更改

这个码是一个“新项目”创建按钮触发一个javascript:

<tr class="item1"><!-- contenido de tabla --> 
    <td> 
     <select name="postArrayProducto[]"> 
     <option>Suave</option> 
      <option>Fuerte</option> 
     <option>Merken</option> 
     </select> 
    </td> 
    <td> 
     <select name="postArrayFormato[]" onchange="cambiarUnidades(this.value)"> 
      <option value="frascoG">Frasco 370g</option> 
     <option value="frascoC">Frasco 220g</option> 
     <option value="sachet">Sachet 200g</option> 
     <option value="doypack">Doy/Pack 250g</option> 
     </select> 
    </td> 
    <td> 
     <input type="text" name="postArrayUnidades[]" size="1" maxlength="3" readonly value="20"> unidades 
    </td> 
    <td> 
     <input type="text" name="postArrayCajas[]" size="1" maxlength="3"> cajas 
    </td> 
</tr><!-- fin contenido tabla --> 

所以当cambiarUnidades(this.value)被触发我想改变postArrayUnidades[]

的JS:

<script type="text/javascript"> 
    $(window).load(function(){ 
     cambiarUnidades = function(el) { 
      if(el == "frascoG"){ 
       $(el).parents('td').next('td').find('input').val('99');   
      } 
      if(el == "frascoC"){ 
       $(el).parent('tr').find('td:nth-child(3)').find('input').val('99');    
      } 
      if(el == "sachet"){ 
       $(el).parent('tr').find('td:nth-child(3)').find('input').value='99'; 
      } 
      if(el == "doypack"){ 
       $(el).parent().next('td').find('input').val('99'); 
      }  
     } 
    }); 
</script> 

我试过所有这些,并没有工作,我一直无法改变输入值:(请帮助!

回答

2

小提琴:

http://jsfiddle.net/gM2vX/2/

HTML:

<table> 
    <tr class="item1"><!-- contenido de tabla --> 
     <td> 
      <select name="postArrayProducto[]"> 
       <option>Suave</option> 
       <option>Fuerte</option> 
       <option>Merken</option> 
      </select> 
     </td> 
     <td> 
      <select name="postArrayFormato[]" id="test"> 
       <option value="frascoG">Frasco 370g</option> 
       <option value="frascoC">Frasco 220g</option> 
       <option value="sachet">Sachet 200g</option> 
       <option value="doypack">Doy/Pack 250g</option> 
      </select> 
     </td> 
     <td> 
      <input type="text" name="postArrayUnidades[]" size="1" maxlength="3" readonly value="20"/> unidades 
     </td> 
     <td> 
      <input type="text" name="postArrayCajas[]" size="1" maxlength="3"> cajas 
     </td> 
    </tr> 
</table><!-- fin contenido tabla --> 

的jQuery:

$(function(){ 
    $("body").on("change","#test",function(){ 
     $(this).parent().next().find("input").val("99"); 
    }); 

});

而不是body,你可以有一些不通过ajax动态加载的div。它提高了性能。它不会从文档级搜索元素,而是从指定的元素中检查像我一样的(body)

+1

良好的解决方案 - 它消除了内联JavaScript,这是一件好事,删除+1 – gibberish

+1

我在回答这个问题时看到了一个奇怪的东西,用jquery。请点击此链接,如果你想知道它 - http:// stackoverflow。com/questions/21122266/weird-jquery-functionality-on-missing-table-tags-around-tr –

+0

谢谢!!!!!! – gepex

0

您传递函数的值select(onchange =“cambiarUnidades(this.value)” ),这样你就不能使用任何像$(el).parents('td')....因为el是值,而不是对象。

所以首先你应该改变的onchange到cambiarUnidades(本)

,那么你必须if语句使用$(EL).VAL()== ...的。

接下来的事情是,父(“TR”)是不对的,因为父()将不上去2倍的水平,所以你应该使用父母(“TR”)

这样一个线看起来是这样的:

if ($(el).val() == "frascoC") { 
    $(el).parents('tr').find('td:nth-child(3)').find('input').val('99');    
} 

还有一件事是你应该将TR元素包装在一个表中,使其工作。

(当然还有其他的解决方案,我想在你的代码的错误部分指向,不写其他解决方案)