2015-01-27 3 views
0

Нужна помощь. с нижеследующим javascript. При вставке строки мне нужно случайное число t для генерации нового номера на каждом клике (вставка). Я должен отправлять каждую строку в процессор как массив, поэтому для каждой вставки должен быть уникальный номер. Я могу заставить его работать в первый раз, но, конечно, он просто генерирует нагрузку, а не каждый клик. Был у него часами, пытаясь понять это ... но без кубиков.Javascript случайное число в функции onclick

Любая помощь?

<script type="text/javascript"> 
    $(document).ready(function(){ 
    var i=1; 
    var t = Math.floor(Math.random() * 256); 

     $("#add_row").click(function(){ 
     $('#addr'+i).html("<td>"+ (i+1) +"</td><td><input name='need["+t+"][type]' type='text' placeholder='Name' class='form-control input-md' /> </td><td><input name='need["+t+"][scope]' type='text' placeholder='Mail' class='form-control input-md'></td><td><input name='need["+t+"][priority]' type='text' placeholder='Mobile' class='form-control input-md'></td>"); 

     $('#tab_logic').append('<tr id="addr'+(i+1)+'"></tr>'); 
     i++; 
    }); 
    $("#delete_row").click(function(){ 
    if(i>1){ 
     $("#addr"+(i-1)).html(''); 
     i--; 
     } 
    }); 

    }); 

+0

Почему бы вам просто не поставить случайное числовое число внутри вашей функции щелчка? Поскольку теперь, из-за закрытия, переменная t будет создаваться один раз, когда ваша страница будет загружена. –

+0

Спасибо, bmartin !!! Работал как шарм! – Tharamis

ответ

1

Вы правы, что вы только генерации случайного числа на странице загрузки, так как вы определяете т вправо при загрузке страницы. Что вам нужно сделать, это произвести число внутри функции мыши, так что путь

var t = Math.floor(Math.random() * 256); 

называется каждый раз, когда вы щелкаете, а не только один раз, когда документ будет готов.

Таким образом, вместо

$("#add_row").click(function(){ 
    $('#addr'+i).html("<td>"+ (i+1) +"</td><td><input name='need["+t+"][type]' type='text' placeholder='Name' class='form-control input-md' /> </td><td><input name='need["+t+"][scope]' type='text' placeholder='Mail' class='form-control input-md'></td><td><input name='need["+t+"][priority]' type='text' placeholder='Mobile' class='form-control input-md'></td>"); 

    $('#tab_logic').append('<tr id="addr'+(i+1)+'"></tr>'); 
    i++; 

});

вы бы:

$("#add_row").click(function(){ 
    var t = Math.floor(Math.random() * 256); 
    $('#addr'+i).html("<td>"+ (i+1) +"</td><td><input name='need["+t+"][type]' type='text' placeholder='Name' class='form-control input-md' /> </td><td><input name='need["+t+"][scope]' type='text' placeholder='Mail' class='form-control input-md'></td><td><input name='need["+t+"][priority]' type='text' placeholder='Mobile' class='form-control input-md'></td>"); 

    $('#tab_logic').append('<tr id="addr'+(i+1)+'"></tr>'); 
    i++; 

});

+1

Да. Такие вещи называются закрытием [закрытие] (http://www.w3schools.com/js/js_function_closures.asp) –