php - 使用 HTML 单选按钮和 javascript 进行评级

标签 php javascript jquery html magento

我正在尝试更改 Magento 评论扩展的默认行为,以便它允许不投票,但前提是附加了评论。我已经做了足够的研究来知道在哪里更改代码,并且我添加了一个“取消评级”功能,但它并没有完全按预期工作,而且我似乎无法弄清楚如何检查评级是否是目前。

这是定义 radio 的 HTML 部分。

<div class="right" id="ratings-right">
    <?php $countRatings = count($this->getRatings()); ?>
    <?php foreach ($this->getRatings() as $_rating): ?>
        <?php if ( $countRatings > 1 ): ?>
        <div class="rating-code" id="ratings-code[<?php echo $_rating->getRatingCode(); ?>]"</div>
        <?php endif; ?>
        <ul>
        <?php $sizeOptions = sizeof($_rating->getOptions()); $index=0; ?>
         <li class="value">
            <div class="rating-cancel"></div>
            <input type="radio" value="0" name="cancel[<?php echo $_rating->getId() ?>]" id="<?php echo $this->escapeHtml($_rating->getRatingCode()) ?>C<?php echo $_rating->getId() ?>" class="radio" /></li>
        <?php foreach ($_rating->getOptions() as $_option): $index++;?>
            <li class="value">
                <div class="separate-rating-star"></div>
                <input type="radio" <?php if ( $sizeOptions ==  $index ) :?><?php endif; ?>name="ratings[<?php echo $_rating->getId() ?>]" id="<?php echo $this->escapeHtml($_rating->getRatingCode()) ?>_<?php echo $_option->getValue() ?>" value="<?php echo $_option->getId() ?>" class="radio" />
            </li>
       <?php endforeach; ?>
        </ul>
    <?php endforeach; ?>
    <input type="hidden" name="validate_rating" class="validate-rating" value="" />
</div>

这是发生验证和重置的 JavaScript 部分

Validation.addAllThese(
[
    ['validate-rating', '<?php echo $this->__('Please select a rating above OR write your Review below') ?>', function(v) {
        var ratingContainer = document.getElementById('ratings-right');
        var ratings = ratingContainer.getElementsByClassName('rating-code');
        var values;
        var star;
        var error = 1;
        window.console&&console.log("START");
        for (r=0;r < ratings.length; r++ ) {
            values = ratings.getElementsByClassName('value');
            stars = values.getElementsByTagName('radio');
            for (s=0; s < stars.length; s++ ) {
                console.log("Checking star %d.", s);
                if (stars[s].checked == true) {
                    error = 0;
                    window.console&&console.log("Radio %d is checked.\n", s);
                    }
                }
            var review = $('review_field').length;
            window.console&&console.log("Review size %d.", review);
            if ( review > 5 ) {
                error = 0;
                window.console&&console.log("Review size (%d) greater than 5.", review);
                }
            if( error != 0 ) {
                window.console&&console.log("Failed.\n");
                return false;
            } else {
                 window.console&&console.log("Passed.\n");
                 error = 1;
                 }
            }
        return true;
        }]
    ]
);
$(".overall-raiting ul li").click(
    function(){
        var tthis = this;
        var done = 0;
        var $li = $(tthis).parent().children('li');
        $li.removeClass('active');
        $li.each(function(){
            if( done < 1 ) $(this).addClass('active');
            if ( tthis == this ) done++;
            if( done != 1 ) $(this).prop('checked', false);
            })
        if ( done > 0 ) return false;
        $(this).find('input.radio').attr('checked',true);
        }
    );

尽管在此处阅读了关于在 firefox 中使用带有 firebug 和 Chrome 的 delete window['console']; 方法的问题,但我无法让控制台始终如一地报告值。但似乎我的 .onclick 函数正在将所有 radio 更改为未选中状态,包括应选中的 radio 。据我所知,我没有在验证部分选择 radio ,我已经尝试使用 .val() 和 .value 属性,但这段代码是我最近的尝试。

我想要的只是被点击的 radio 与所有其他未选中的 radio 保持选中状态,并通过确定是否选中任何 radio (包括取消)或文本区域“review_field”是否包含任何内容来进行验证。

我的最终答案如下。它比我的第一个解决方案更优雅,但我希望这对将来的人有所帮助。

最佳答案

根据自己的喜好

all others unchecked and to validate by determining if any is checked (including the cancel) OR if the textarea 'review_field' contains anything

这个函数可能有帮助:

function isValidForm() {
   var numRadios = $('#ratings-right input:radio:checked').length,
       reviewContents = $('#review_field').val(),
       isValid = numRadios == 1 || reviewContents != '';

   return isValid;
}

关于php - 使用 HTML 单选按钮和 javascript 进行评级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16819024/

相关文章:

javascript - 任何使 javascript 设置间隔或 setTimeout 在 Node.js 服务器重新启动后继续计数的解决方法

javascript - 如何使用 JQuery 或 JavaScript 删除表格中的所有链接?

javascript - 如何允许PHP文件只能通过调用reference/view.php?url=123访问

php - 将.net aes256加密代码转换为php

php - 我可以使用 jQuery 将代码添加到 php 文档吗?

javascript - 在加载body之前完成加载外部js?

php - 如何检测 PHP 中最后使用的命名空间?

javascript - Google Maps Javascript API v3 - 如何显示公司的完整信息框

javascript - jQuery : Finding the select elements inside the table row and listening to change event

javascript - setInterval() 数据库检查的替代方案 -> Meteor.js