2017-05-26 112 views
0

我有一个列表,其中插入了一个新行。我希望它后面的所有序列号都增加一个。如果数字大于某值,则将数字增加1

<div class="modal" id="insertroom" style="display: none;"> 
    <button class="dismiss right button"><i class="fa fa-close"></i></button> 
    <h3>Insert a room in the route</h3> 
    <p><span class="fixed-width">Room name:</span> 
     <input name="room_id" id="room_id"/> 
      </p> 
     <p><span class="fixed-width">Sequence number in the route:</span> <input type="number" id="newsequencenumber" name="sequence" value=""></p> 
    <p><span class="fixed-width">Route name:</span> 
     <input name="route_number" id="route_number"/> 
      </p> 
    <p><input type="button" class="button" id="insertdetails" name="insertdetails" value="Insert details"></p> 
</div> 

    <ul class="ui-listview"> 
     <li><span class="half-fixed-width">AB101B</span> 
    Sequence: 
     <input type="number" class="sequence" name="sequence" value="1"> 
     <a class="button inserthere" title="insert room here" href="#" rel="1"> 
      <i class="fa fa-plus-square"></i> 
     </a> 
     </li> 

我写了下面的代码,但它似乎被忽略了if(new_sequence_number > thisval)部分,因为它加1所有的数字,而不是只具有比插入行的序列号更大的值的。

$('#insertdetails').on('click', function() { 
    /*get values input into modal */ 
    var new_sequence_number = $('#insertroom #newsequencenumber').val(); 
    var new_room_id = $('#insertroom #room_id').val(); 
    var new_route_id = $('#insertroom #route_number').val(); 
    /*put those values into the new row */ 
    $('#new_room_id' + new_sequence_number).val(new_room_id); 
    $('#new_route_id' + new_sequence_number).val(new_route_id); 
    $('#insertroom').hide(); 
    $('.overlay').hide(); 

    $('.sequence').filter(function(new_sequence_number) { 
    var thisval = parseInt($(this).val()); 
    var plusone = thisval + 1; 
    if(thisval > new_sequence_number) { 
     $(this).val(plusone); 
    } 
    }); 
}); 
+0

我检查了所有具有类似标题的问题,但它们都没有解决我的问题 –

+3

您已经命名'参数new_sequence_number'将是该组中的元素的索引 - 是你期待什么它是?如果你可以设置一个 - 或至少是关联的HTML,它可能有助于查看工作片段 –

+1

如果你的解释是正确的,那么你有错误的IF子句。它应该是'thisval> new_sequence_number'。你说如果这个值大于序列号。 – yomisimie

回答

1

在函数参数的new_sequence_number是一个新的变量和将不参考其上述所声明的“new_sequence_number”。该参数可以省略以使用外部变量。

$('.sequence').each(function() { 
    // .. 
    if(thisval >= new_sequence_number) { 
    //.... 

纯粹是因为答案似乎本身那么短,下面是一个替代:d

val()可以采取函数为其中值可以被操纵的参数。这种方法的缺点是所有输入都设置好了,即使它们保持不变。好处在于所有的逻辑都是短暂的单一功能调用。

$('.sequence').val(function(ind,v) {  
    return (v = +v) < new_sequence_number ? v : ++v; 
    }); 
+0

谢谢。我用第一个,它是完美的工作 –

相关问题