0

私は次の機能を持っています:

    function calcTotal(event)
    {var myId = event.currentTarget.id;

    myId = myId.replace(/[^0-9]/g, '');

    var timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;

    if($('#start'+myId).val().match(timeRegex) && $('#end'+myId).val().match(timeRegex) &&    $('#pause'+myId).val().match(timeRegex))
    {   alert('win');
        var minutes = 0;

        var n = $('#end'+myId).val().split(':');
        minutes = parseInt(n[0])*60 + parseInt(n[1]);

        var n = $('#start'+myId).val().split(':');
        minutes -= parseInt(n[0])*60 + parseInt(n[1]);

        var n = $('#pause'+myId).val().split(':');
        minutes -= parseInt(n[0])*60 + parseInt(n[1]);

        var hours = Math.floor(minutes/60);
        minutes = minutes % 60;
        alert(hours + ':' + minutes);
        $('#total' + myId).val(hours + ':' + minutes);
    }
    else
    {   alert('fail');
        $('#total' + myId).val('00:00');
    }

    }   
   </script>

myID が 1 であると仮定し、次の値を仮定します。

start1 = 00:00
end1 = 10:00
pause1 = 02:00

この関数で前の 3 つの値を正規表現と照合して、それらが有効な時間かどうかを判断したいと考えています。その後、その日の合計作業時間を計算したいと思います: end1-start1-pause1. 何らかの理由で、これらの正しい値を使用しても、関数は if(....){ alert('win')...} に入りません。

正規表現に何か問題があると思いますが、すでにチェックして(stackoverflow question)、その正規表現を使用しました。

誰が私が間違っているのか教えてもらえますか?

コード全体:

<?php
if(isset($_POST['date']))
{       $sql = "INSERT INTO `hour_administration`.`hours` (`h_id`, `date`, `start`, `end`) VALUES";
    foreach($_POST['date'] as $k => $v)
    {
        if(empty($_POST['date'][$k]))
        break;
        if($k > 0)      
        $sql .= ",";        
        $sql .= "(NULL, '".$_POST['date'][$k]."',  '".$_POST['start_time'][$k].":00',  '".$_POST    ['end_time'][$k].":00')";

    }
    $sql .= ";";
    echo " Query: ".$sql. "</BR>";
    mysql_query($sql) or die('Could not query: ' . mysql_error());
}

if(isset($_POST['rows']))
{
    $rows = $_POST['rows'];
}else
{
$rows = 5;  
}




?>
<script>
$(document).ready(function() { 

    $( ".date" ).datepicker({ dateFormat: "yy-mm-dd" });
    $(".time").mask("99:99");           
    $('.start_time').change(function(e) {               
            calcTotal(e);

    });

    $('.end_time').change(function(e) {     
        calcTotal(e);

    });

    $('.pause').change(function(e) {        
        calcTotal(e);

    });
});

function calcTotal(event)
{   var myId = event.currentTarget.id;  
    myId = myId.replace(/[^0-9]/g, ''); 

    var timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;

    if($('#start'+myId).val().match(timeRegex) && $('#end'+myId).val().match(timeRegex) && $('#pause'+myId).val().match(timeRegex))
    {   
        var minutes = 0;

        var n = $('#end'+myId).val().split(':');
        minutes = parseInt(n[0])*60 + parseInt(n[1]);

        var n = $('#start'+myId).val().split(':');
        minutes -= parseInt(n[0])*60 + parseInt(n[1]);

        var n = $('#pause'+myId).val().split(':');
        minutes -= parseInt(n[0])*60 + parseInt(n[1]);

        var hours = Math.floor(minutes/60);
        minutes = minutes % 60;
        alert(hours + ':' + minutes);
        $('#total' + myId).val(hours + ':' + minutes);
    }
    else
    {   alert($('#start'+myId).val());
        $('#total' + myId).val('00:00');
    }

}   
   </script>

<div class="inner_container">
  <form name="input" method="POST" id="input">
    <table border="1">
      <tr>
        <td>Date</td>
        <td>Start time</td>
        <td>End time</td>
        <td>Pause</td>
        <td>Total</td>
      </tr>
      <tr>
        <?php for($i = 0;$i < $rows;$i++)
        {?>
        <td><input type="text" class="date" name="date[]" id="start<?php echo $i;?>"></td>
        <td><input type="text" class="start_time time"  name="start_time[]" id="start<?php echo $i;?>"></td>
        <td><input type="text" class="end_time time" name="end_time[]" id="end<?php echo $i;?>" ></td>
        <td><input type="text" class="pause time" name="pause[] " id="pause<?php echo $i;?>"></td>
        <td><input type="text" class="total" name="total[]" id="total<?php echo $i;?>"></td>
      </tr>
      <?php }?>
    </table>
    <input type="submit" id="submit_inner_container"value="Submit">
  </form>
  <form name="amount" method="POST">
    <label for="name">How many rows would you like?</label>
    <input type="text" name="rows" size="3" id="rows" value="<?php echo $rows; ?>"/>
    <input type="submit" value="Rows"
  </form>
</div>
4

3 に答える 3

1

HTML は、同じid属性を持つ 2 つの入力フィールドがあることを示しています。

    <td><input type="text" class="date" name="date[]" id="start<?php echo $i;?>"></td>
    <td><input type="text" class="start_time time"  name="start_time[]" id="start<?php echo $i;?>"></td>

ここで最初のものは「開始」ではなく「日付」を使用する必要がありますか?

于 2013-01-08T20:59:07.390 に答える
0

正規表現は正常に機能しています。

このjsfiddleを参照してください

var timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;
var start = "00:00"
var end = "10:00"
var pause = "02:00"

if(start.match(timeRegex) && end.match(timeRegex) && pause.match(timeRegex))
{   
  alert('win');
}
else
{   
  alert('fail');
}

さらに回答が必要な場合は、セレクターがアクセスしているHTMLコードを投稿してください

于 2013-01-08T21:05:24.857 に答える
0
var timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;

timeRegex.test('00:00') // true
timeRegex.test('10:00') // true
timeRegex.test('02:00') // true

ifつまり、問題は正規表現にあるのではなく、ステートメントに問題はありません。問題は、セレクターまたはテキスト ボックスの値のいずれかにあるはずです。.で通過する空白またはその他の文字を探しますval

于 2013-01-08T20:57:40.627 に答える