2017-05-26 90 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

謝謝。我用第一個,它是完美的工作 –

相關問題