【问题标题】:HTML script and javascriptHTML 脚本和 javascript
【发布时间】:2016-04-09 17:28:55
【问题描述】:

我正在尝试显示数据库中不可用的座位

<?php 
$query = "SELECT * FROM booking;";
$result = mysqli_query ($connection,$query) or die ("<div class='alert alert-danger' role='alert'>You couldn't execute booking query</div>");

//Fetch all rows for each booking
while ($row = mysqli_fetch_array ($result, MYSQLI_ASSOC)) {
extract ($row);
echo "
    <script type='text/javascript'>
        sc.get(['".$BOOKING_SEAT."']).status('unavailable');
    </script>";
echo "\n";
}
?>

这是我稍后看到的:

<!-- Booking JavaScript -->
<script type="text/javascript" src="js/booking.js"></script> 
<script type="text/javascript" src="js/seat-charts.min.js"></script> 
<script type='text/javascript'>
    sc.get(['5_7']).status('unavailable');
        </script>

        <script type='text/javascript'>
            sc.get(['5_8']).status('unavailable');
        </script>

        <script type='text/javascript'>
            sc.get(['5_9']).status('unavailable');
        </script>

        <script type='text/javascript'>
            sc.get(['5_10']).status('unavailable');
        </script>

当我检查代码时,我看到了我到底想要什么,但它不起作用,因为它显示“未捕获的 ReferenceError:sc 未定义”。

“sc”和“get”来自“js/booking.js”和“js/seat-charts.min.js”。

更新:

var price = 10; //price
$(document).ready(function() {
    var $cart = $('#selected-seats'), //Sitting Area
    $counter = $('#counter'), //Votes
    $total = $('#total'); //Total money

    var sc = $('#seat-map').seatCharts({
        map: [  //Seating chart
            'aaaaaaaaaa',
            'aaaaaaaaaa',
            'aaaaaaaaaa',
            'aaaaaaaaaa',
            'aaaaaaaaaa'
        ],
        naming : {
            top : false,
            getLabel : function (character, row, column) {
                return column;
            }
        },
        legend : { //Definition legend
            node : $('#legend'),
            items : [
                [ 'a', 'available',   'Option' ],
                [ 'a', 'unavailable', 'Sold']
            ]                   
        },
        click: function () { //Click event
            if (this.status() == 'available') { //optional seat
                $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', (this.settings.row+1)+'_'+this.settings.label)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);

                $counter.text(sc.find('selected').length+1);
                $counter.attr('value', sc.find('selected').length+1);   

                $total.text(recalculateTotal(sc)+price);
                $total.attr('value', recalculateTotal(sc)+price);   

                return 'selected';
            } else if (this.status() == 'selected') { //Checked
                    //Update Number
                    $counter.text(sc.find('selected').length-1);
                    $counter.attr('value', sc.find('selected').length-1);
                    //update totalnum
                    $total.text(recalculateTotal(sc)-price);
                    $total.attr('value', recalculateTotal(sc)-price);   

                    //Delete reservation
                    $('#cart-item-'+this.settings.id).remove();
                    //optional
                    return 'available';
            } else if (this.status() == 'unavailable') { //sold
                return 'unavailable';
            } else {
                return this.style();
            }
        }
    });
    //sold seat
    //sc.get(['1_2', '4_4','4_5','6_6','6_7','8_5','8_6','8_7','8_8', '10_1', '10_2']).status('unavailable');

});
//sum total money
function recalculateTotal(sc) {
    var total = 0;
    sc.find('selected').each(function () {
        total += price;
    });

    return total;
}

**

问题是“sc”不是全局的,我们必须把它放在外面 函数

**

【问题讨论】:

  • 当您在基于 PHP 和 Javascript 的客户端-服务器通信方面变得更有经验时的一点旁注:使用 asynchronous requests (AJAX) 而不是编写 Javascript 检索数据(最好采用 JSONXML 格式)直接用PHP。混合编程语言并没有带来任何好处。好吧,也许是在进化算法领域,但肯定不是在手动创建的代码领域。
  • 我还不知道 AJAX 呵呵

标签: javascript php sql


【解决方案1】:

你应该初始化你的seatCharts,例如:

var sc = $('#seat-map').seatCharts({
    map: [
        'aaaaaaaaaaaa',
        'aaaaaaaaaaaa',
        'bbbbbbbbbb__',
        'bbbbbbbbbb__',
        'bbbbbbbbbbbb',
        'cccccccccccc'
    ],
    seats: {
        a: {
            price   : 99.99,
            classes : 'front-seat' //your custom CSS class
        }

    },
    click: function () {
        if (this.status() == 'available') {
            //do some stuff, i.e. add to the cart
            return 'selected';
        } else if (this.status() == 'selected') {
            //seat has been vacated
            return 'available';
        } else if (this.status() == 'unavailable') {
            //seat has been already booked
            return 'unavailable';
        } else {
            return this.style();
        }
    }
});

并尝试添加ready 函数,因为sc 变量将在加载后声明,否则sc.gets 将在加载DOM 时触发:

echo "<script type='text/javascript'> $(document).ready(function(){";
while ($row = mysqli_fetch_array ($result, MYSQLI_ASSOC)) {
    extract ($row);
    echo "sc.get(['".$BOOKING_SEAT."']).status('unavailable'); \n";
}
echo "});"

检查jQuery Seat Charts

希望这会有所帮助。

【讨论】:

  • 这就是我在“booking.js”上的内容,看看我的更新,你可以看到有一行是关于我试图在我的新脚本中修改的不可用座位的评论跨度>
  • 感谢@ZakariaAcharki,因为现在代码更好但仍然无法正常工作,“未捕获的 ReferenceError: sc is not defined”
【解决方案2】:

问题是“sc”不是全局的,我们必须把它放在函数之外

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多