【问题标题】:Simple jQuery script works fine in Chrome and it fails in Firefox简单的 jQuery 脚本在 Chrome 中运行良好,但在 Firefox 中失败
【发布时间】:2011-12-06 06:08:01
【问题描述】:

我有这个代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>The management panel</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.min.js'></script>
<script type="text/javascript">
function markPercentages(){
    var checked = $(':checked');
    var percentage = Math.round((1 / checked.length) * 100);
    checked.siblings('.percentage').html(percentage);
    $('input[type=checkbox]').not(checked).siblings('.percentage').html('0');
}
</script>

</head>
<body>
    <form>
    Building<br /><div><input type="checkbox" onclick='markPercentages()' name="6" value="6"> Susilo 2A-13 (<span class='percentage'>0</span>%)</div><br />
    <div><input type="checkbox" onclick='markPercentages()' name="7" value="7"> Susilo 2A-12 (<span class='percentage'>0</span>%)</div>


    <br />Category<br /><select name="title"><option value="Wages">Wages</option><option value="Listrik">Listrik</option><option value="Iuran Bulanan">Iuran Bulanan</option></select><br />
        On<br /><input type=text name=date id=date /><br />

    Notes<br /><input type=text name=note /><br />
    Value<br /><input type=text name=cost onChange="addDecimalPoints(this.id)" id=cost /><br />
    <input type=submit value="Save" />
    </form>

</body>
</html>

它会在建筑物 (Susilos) 旁边显示它正在增加的成本的百分比。简而言之,如果选中一个,则显示 100%,如果选中两个,则第一个显示 50%,第二个显示 50%,依此类推。

它在 Chrome 中运行良好,但在 Firefox 中,当我只选中一个时,它会显示 50%,就像选中了两个一样。当我检查两个时,它们显示 33%,就像我检查了其中三个一样。为什么会发生这种情况以及我应该如何解决这个问题?

无论如何,删除该代码之外的部分代码也可以:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>The management panel</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.min.js'></script>
<script type="text/javascript">
function markPercentages(){
    var checked = $(':checked');
    var percentage = Math.round((1 / checked.length) * 100);
    checked.siblings('.percentage').html(percentage);
    $('input[type=checkbox]').not(checked).siblings('.percentage').html('0');
}
</script>

</head>
<body>
    <form>
    Building<br /><div><input type="checkbox" onclick='markPercentages()' name="6" value="6"> Susilo 2A-13 (<span class='percentage'>0</span>%)</div><br />
    <div><input type="checkbox" onclick='markPercentages()' name="7" value="7"> Susilo 2A-12 (<span class='percentage'>0</span>%)</div>

    </form>

</body>
</html>

谢谢

【问题讨论】:

  • 我似乎无法复制...您使用的是什么版本的 Firefox?
  • 是的,它在 FireFox 8.1 中运行
  • 添加了准确的代码,因为无法复制错误。

标签: javascript jquery firefox google-chrome


【解决方案1】:

http://jsfiddle.net/sjRAu/ - 适用于所有浏览器

HTML:

<div>
    <input type='checkbox' />Susilo 2A-13 (<span class='percentage'>0</span>%)
</div>
<div>
    <input type='checkbox' />Susilo 2A-14 (<span class='percentage'>0</span>%)
</div>
<div>
    <input type='checkbox' />Susilo 2A-15 (<span class='percentage'>0</span>%)
</div>

JS:

$(document).ready(function() {
$('input').click(function(){
    markPercentages();  
});

function markPercentages(){
    var checked = $(':checked');
    var percentage = Math.round((1 / checked.length) * 100);
    checked.siblings('.percentage').html(percentage);
    $('input[type=checkbox]').not(checked).siblings('.percentage').html('0');
}

});

如果您在页面上有更多输入,只需给您的复选框一个类似“markbox”的类,然后在您的 JS 中将“输入”更改为“.markbox”

【讨论】:

  • 谢谢,工作就像一个魅力。也感谢关于 jsfiddle 的提示,非常有用的工具。
【解决方案2】:

这样用怎么样

$(function(){
   $('input[type=checkbox').click(function(){
          var checked = $('input[type=checkbox]').attr('checked');
          var percentage = Math.round((1 / checked.length) * 100);
          checked.siblings('.percentage').html(percentage);
          $('input[type=checkbox]').not(checked).siblings('.percentage').html('0');         
   });
});

【讨论】:

    【解决方案3】:

    试试这个代码。我基本上重写了你所有的逻辑:

    <html>
    <head>
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.min.js'></script>
    <script type="text/javascript">
    $(document).ready(function() {
        $(':checkbox').change(function() {
            var num_checked = $(':checkbox:checked').length;
    
            if (num_checked == 0) {
                $(':checkbox').each(function() {
                    $(this).siblings('.percentage:eq(0)').text('0');
                });
    
                return;
            }
    
            var percentage = Math.round(100 / num_checked);
    
            $(':checkbox').each(function() {
                if ($(this).is(':checked')) {
                    $(this).siblings('.percentage:eq(0)').text(percentage);
                } else {
                    $(this).siblings('.percentage:eq(0)').text('0');
                }
            });
        });
    });
    </script>
    </head>
    <body>
    <div>
        <input type='checkbox'/>Susilo 2A-13 (<span class='percentage'>0</span>%)
    </div>
    <div>
        <input type='checkbox' />Susilo 2A-14 (<span class='percentage'>0</span>%)
    </div>
    <div>
        <input type='checkbox' />Susilo 2A-15 (<span class='percentage'>0</span>%)
    </div>
    </body>
    </html>
    

    演示:http://jsfiddle.net/NKuHS/3/

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      相关资源
      最近更新 更多