【问题标题】:jQuery highlight effect refreshes page unexpectedlyjQuery高亮效果意外刷新页面
【发布时间】:2011-06-23 16:04:28
【问题描述】:

我有一个如下所示的表单:

<form id="addClassesToDoc" action="">
    <table id="classesTable" style="border-collapse: collapse" cellpadding="3">
        <thead>
            <tr style="background-color: #a04a56; color: #ffffff;">
                <td width="50px"></td>
                <td width="75px"><b>Class<br />Number</b></td>
                <td width="500px"><b>Class Name</b></td>
            </tr>
        </thead>
        <tbody>
            <tr bgcolor="#EFE5D3">
                <td align="center"><input type="checkbox" class="chkAddClass" name="classesToAddToDoc[]" value="45" /></td>
                <td>PHB7075</td>
                <td>Organizational Systems and Leadership </td>
            </tr>
            <tr bgcolor="">
                <td align="center"><input type="checkbox" class="chkAddClass" name="classesToAddToDoc[]" value="126" /></td>
                <td>TEST111</td>
                <td>Test add new class</td>
            </tr>
        </tbody>
    </table>
</form>

我正在使用此代码验证是否在 $.ajax() 调用之前检查了任何复选框:

var classesToAddToDoc = new Array();
if ($('input.chkAddClass:checked').length > 0) {
    // At least one class checked
    // Get the id(s) of the checked class(es)
    $.each($('#classesTable input[name="classesToAddToDoc[]"]:checked'), function() {
        classesToAddToDoc.push($(this).attr('value'));
    });
} else {
    // No docs checked
    //alert('Please check at least one class to add to the selected document.');
    $.each($('#classesTable input[type="checkbox"]').parent().effect('highlight',{color: '#A04A56'},1500));
    return false;
}

在 else 子句中,当我取消注释警告并且注释了突出显示行时,警告显示并且页面保持在同一位置。

但是当我注释掉alert,取消注释高亮行时,页面刷新,复选框单元格高亮,地址栏添加表单参数,类似这样:

[pageAddress]?docsList=46&submitAddClassesToDoc=Add+Checked+Classes+to+Selected+Document

为什么突出显示会这样做,我该如何阻止它?

【问题讨论】:

  • 刷新是由于URL改变引起的。修复后者,您将修复前者。此外,当你真的应该只使用 .map().each() 时,你正在使用 $.each()
  • 我不明白 URL 是如何变化的。你能更详细地解释一下吗?另外,我不确定如何更改每个部分 - 我仍在弄清楚 jQuery 基础知识...
  • 另外,我在 .each() 的文档中看到的示例中包含功能 - 在我的情况下如何使用它?
  • 查看我的编辑。您是否有机会制作一个重现页面刷新问题的最小演示?例如使用jsfiddle.netjsbin.com

标签: jquery refresh highlight


【解决方案1】:

我不确定如何更改每个部分 - 我仍在研究 jQuery 基础知识

当然,我至少可以告诉你如何清理它:

var classesToAddToDoc;
if ($('input.chkAddClass:checked').length)
{
    // At least one class checked
    // Get the id(s) of the checked class(es)
    classesToAddToDoc = $('#classesTable input[name="classesToAddToDoc[]"]:checked').map(function ()
    {
        return $(this).val(); // probably want .val() over .attr('value')
    }).get();
}
else
{
    // No docs checked
    //alert('Please check at least one class to add to the selected document.');
    $('#classesTable input:checkbox').parent().effect('highlight',{color: '#A04A56'},1500));
    return false;
}

此外,我在 .each() 文档中看到的示例中包含函数 - 在我的情况下如何使用它?

类似

$('some selector here').each(function (index, element)
{
    // do something for each element

    // index is the current index of iteration
    // this and element are references to the current element
});

在您的特定情况下,您实际上根本不需要 .each()

【讨论】:

  • 亲爱的,伙计!我只是将它复制/粘贴到我的代码中,它就起作用了!谢谢!好的,既然我已经完成了修复它的兴奋,那么究竟是什么导致了页面刷新?它一定与我的 $.each() 语法有关,但我不明白这怎么可能导致数据显示在地址栏中。
  • 老实说,我完全不知道。
猜你喜欢
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多