javascript - 如何动态地将参数从每个页面传递给javascript

标签 javascript jquery

以下代码在每个列表页面(例如下面给出的示例列表页面)上提供删除功能,其中每个页面中只有 3 个变量(tableId、removeButtonId、headerCheckbox)有所不同。如何在所有页面中重复使用此脚本,而不是在每个页面中定义此脚本。如何从每个页面动态地将参数传递给此脚本?

        <script type="text/javascript">
            var tableId = '#usersChildren\\:userList';
            var removeButtonId = '#usersChildren\\:removeUsers';
            var headerCheckbox = '#selectAll';

            jQuery(document).ready(function() {
                if (jQuery(tableId).find("input[type='checkbox']").length == 1) {
                    jQuery(headerCheckbox).hide();
                    jQuery(removeButtonId).hide();
                } else if(jQuery(tableId).find("input[type=checkbox]:checked").length == 0) {
                    jQuery(removeButtonId).hide();
                    jQuery(headerCheckbox).click(function() {
                        jQuery(tableId).find("input[type='checkbox']").attr('checked', jQuery(headerCheckbox).is(':checked'));
                    });
                }

                jQuery(tableId).find("input[type='checkbox']").each(function() {
                    if(jQuery(this).attr('id') != headerCheckbox) {
                        jQuery(this).click(function() {
                            if (jQuery(headerCheckbox).is(':checked')) {
                                if(jQuery(tableId).find("input[type=checkbox]:checked").length != 1) {
                                    jQuery(removeButtonId).show();
                                }
                            } else if(jQuery(tableId).find("input[type=checkbox]:checked").length > 0) {
                                jQuery(removeButtonId).show();
                            } else {
                                jQuery(removeButtonId).hide();
                            }
                        });
                    }
                });
            });
        </script>

最佳答案

将此代码放入源自脚本标记的脚本中,放在需要它的每个模板上:

function bindRemoveButton(tableId, removeButtonId, headerCheckbox) {
  if (jQuery(tableId).find("input[type='checkbox']").length == 1) {
      jQuery(headerCheckbox).hide();
      jQuery(removeButtonId).hide();
  } else if(jQuery(tableId).find("input[type=checkbox]:checked").length == 0) {
      jQuery(removeButtonId).hide();
      jQuery(headerCheckbox).click(function() {
          jQuery(tableId).find("input[type='checkbox']").attr('checked', jQuery(headerCheckbox).is(':checked'));
      });
  }

  jQuery(tableId).find("input[type='checkbox']").each(function() {
      if(jQuery(this).attr('id') != headerCheckbox) {
          jQuery(this).click(function() {
              if (jQuery(headerCheckbox).is(':checked')) {
                  if(jQuery(tableId).find("input[type=checkbox]:checked").length != 1) {
                      jQuery(removeButtonId).show();
                  }
              } else if(jQuery(tableId).find("input[type=checkbox]:checked").length > 0) {
                  jQuery(removeButtonId).show();
              } else {
                  jQuery(removeButtonId).hide();
              }
          });
      }
  });
}

在每个需要它的模板上

<script type="text/javascript" src="remove.js"></script>
<script type="text/javascript">
  jQuery(document).ready(function() {
    var tableId = '#usersChildren\\:userList';
    var removeButtonId = '#usersChildren\\:removeUsers';
    var headerCheckbox = '#selectAll';

    bindRemoveButton(tableId, removeButtonId, headerCheckbox);
  });
</script>

现在您可以在一处更改 bindRemoveButton 函数,并且在每个模板中您只需更改三个变量。

关于javascript - 如何动态地将参数从每个页面传递给javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545170/

相关文章:

javascript - 无法修改/定位 jQuery 对象中的外部包装器

javascript - 在 JavaScript 中检查值并运行计算

javascript - 如何将 jQuery 函数翻译为原生 JavaScript?

jquery - 使用 Bootstrap 的响应图像

javascript - QuickPay Node.js REST api

javascript - 无法专注于 Bootstrap Carousel 中的输入字段

javascript - 将用户输入直接保存到 JQuery 中的变量中

javascript - Clojure 到 JavaScript

javascript - 我需要在 ASP.NET 中编写动态报表生成器代码,应该从哪里开始?

javascript - 尝试使用 queue.js 将简单的 CSV 文件加载到 D3