我已經將自定義表添加到Opencart數據庫中,其中有一個字段/列,名爲average_rating
(值= null
至5
)。Opencart自定義:評分的服務器端腳本
在我的(自定義)模板(.tpl文件)中,我添加了一個代碼來獲取並顯示數據庫當前記錄的評分。
這裏是.tpl文件中的代碼:
<div class="form-group">
<label class="col-sm-2 control-label" for="input-average_rating"><?php echo $entry_average_rating; ?></label>
<div class="col-sm-10">
<input type="hidden" name="average_rating" value="<?php echo $average_rating; ?>" id="input-average_rating" />
<?php for ($i = 0; $i < $average_rating; $i++) { ?>
<div class="rating_hover" id="<?php echo 'r' . ($i+1) ?>" title="<?php echo $i+1 ?>" data-toggle="tooltip"><i class="fa fa-star"></i></div>
<?php } ?>
<?php for ($i = $average_rating; $i <= 4; $i++) { ?>
<div class="rating_normal" id="<?php echo 'r' . ($i+1) ?>" title="<?php echo $i+1 ?>" data-toggle="tooltip"><i class="fa fa-star"></i></div>
<?php } ?>
</div>
</div>
爲藍星星,我用.rating_hover
類,爲灰的:.rating_normal
類(見下圖)。
所有這些東西正常工作。但是現在我想做一些我沒有經驗的事情,我希望能夠提出任何關於我的問題的建議。
問題:當鼠標指針位於灰色星形上時,它必須變成藍色,就像它之前的那樣。當點擊一個星號時,我隱藏的輸入必須得到被點擊的div元素的title屬性的值。我不想寫一個客戶端JavaScript來做到這一點。有人可以提供一個關於如何使用JSON或AJAX做到這一點...或以某種方式請?
我的意思是:是這樣的:
$('div[id=\'r*\']').onmouseover({
// for (i=$average_rating; i<=[current_id]; i++) {
// ??? document.getElementById('r[i]').style.ClassName = 'someclass';
});
Javascript的替代工作正常,但我仍然有JSON腳本問題: 這是怎麼了JavaScript的工作: 每一個DIV元素裏面我添加下面的命令:
<div ... onclick="rOnClick(<?php echo ($i+1) ?>);" onmouseover="rOnMouseOver(<?php echo ($i+1) ?>);" onmouseout="rOnMouseOut(<?php echo ($i+1) ?>);" ... >
而且我的JavaScript功能現在,如下:
<script type="text/javascript">
function rOnMouseOver(id) {
var ar = parseInt(document.getElementById('input-average_rating').value);
if (isNaN(ar)) {
ar = 0;
}
for(i = (ar+1); i <= id; i++) {
document.getElementById('r' + i).className = 'rating_hover';
}
}
function rOnMouseOut(id) {
var ar = parseInt(document.getElementById('input-average_rating').value);
if (isNaN(ar)) {
ar = 0;
}
for(i = 1; i <= ar; i++) {
document.getElementById('r' + i).className = 'rating_hover';
}
for(i = (ar+1); i <= id; i++) {
document.getElementById('r' + i).className = 'rating_normal';
}
}
function rOnClick(id) {
document.getElementById('input-average_rating').value = id;
for(i = 1; i <= id; i++) {
document.getElementById('r' + i).className = 'rating_hover';
}
for(i = (id+1); i <= 5; i++) {
document.getElementById('r' + i).className = 'rating_normal';
}
}
</script>
這個作品,如果我在所有評級的div加上'rating'類,含灰色星星,並寫了下面的代碼來代替:(「評級」) $懸停( //。處理鼠標懸停功能 function(){(this).prevAll()。andSelf()。addClass('rating_hover'); $(this).prevAll()。andSelf()。removeClass('rating_normal'); },// 的手柄鼠標移開 函數(){$ (本).nextAll()andSelf()addClass( 'rating_normal');。。。。 $(本).nextAll()andSelf()removeClass ('rating_hover'); \t $(this).prevAll('。rating')。addClass('rating_normal'); $(this).prevAll('。rating')。removeClass('rating_hover'); } ); – LowLevel
但是當我點擊一個特定的星號時,臨時值必須暫時賦值,但是直到點擊了Save按鈕之後數據庫纔會被更新。爲此,我添加以下代碼: – LowLevel
$('。rating')。綁定( '點擊',函數(){ \t功能(){ $(本).prevAll()andSelf()removeClass( '等級');。 $(本).prevAll()andSelf ().removeClass('rating_normal'); $(this).prevAll()。andSelf()。addClass('rating_hover'); $(this).nextAll()。addClass('rating'); $ (this).nextAll()。removeClass('rating_hover'); $(this).nextAll()。addClass('rating_normal'); $('#input-average_rating')。val()= $(this ).attr('title'); }); – LowLevel