【问题标题】:queryui tabs widget presents url in brower status barjquery ui tabs 小部件在浏览器状态栏中显示 url
【发布时间】:2017-08-08 07:19:19
【问题描述】:

我正在使用精细的 jQuery UI 框架来开发 Web 应用样式的控制面板。它应该看起来像一个原生应用程序。因此,我以信息亭模式打开浏览器窗口,这样就不会出现无关的浏览器功能。我遇到的一个困难是,由于选项卡被呈现为 html 锚点,例如,每个选项卡的 href 在状态栏中显示为“http://127.0.0.1/#main-tab”。这对我来说似乎很俗气,我寻求一种让它消失的方法。我认为这将被视为一个错误,因为在这个锚点用例中,它并没有真正分支到另一个站点,因为它们通常被使用,但受访者不同意。

在这一点上,我想我必须找到另一种方法来解决这个问题(也许是猴子补丁 jQuery UI 代码?呃)。

关于如何解决这个问题的任何建议?

demo page 上查看问题。将鼠标悬停在选项卡上可查看状态栏的变化。

【问题讨论】:

  • 我不认为这是一个错误,只是在这个用例中不是你的偏好。我建议您研究如何在全屏模式的浏览器首选项中抑制这种情况。另一个选项涉及更多,需要从每个选项卡中删除 <a> 并为每个 <li> 元素构建 .click() 绑定。

标签: jquery user-interface jquery-ui web-applications


【解决方案1】:

这可以通过在自定义小部件中自定义 .tabs() 来完成。看看吧。

工作示例:https://jsfiddle.net/Twisty/c315Lno4/3/

CSS

.ui-altTabs {
  position: relative;
  padding: .2em;
}

.ui-altTabs .ui-altTabs-nav li {
  border-bottom-width: 0;
}

.ui-altTabs-tab {
  float: left;
}

.ui-altTabs-anchor {
  display: inline-block;
  padding: .5em 1em;
  cursor: pointer;
}

.ui-altTabs .ui-tabs-panel {
  display: block;
  border-width: 0;
  padding: 1em 1.4em;
  background: none;
}

JavaScript

$(function() {
  $.widget("custom.altTabs", {
    _create: function() {
      this.wrapper = $("<div>")
        .addClass("ui-altTabs custom-altTabs ui-corner-all ui-widget ui-widget-content")
        .insertAfter(this.element);
      this.element.hide();
      this._createTabs();
    },
    _createTabs: function() {
      this.list = $("<ul>")
        .appendTo(this.wrapper)
        .addClass("ui-altTabs-nav ui-corner-all ui-helper-reset ui-helper-clearfix ui-widget-header")
        .attr("role", "tablist");
      this.content = [];
      var origSelf = this.element;
      var contentList = origSelf.find("ul li");
      var contentDivs = origSelf.find("div");
      var currentUiCount = $(document).find("[id^='ui-id-']").length;
      var self = this.list;
      contentDivs.each(function(ind, el) {
        var label = contentList.eq(ind).find("a").text();
        var target = $(el).attr("id");
        var item = $("<li>", {
          class: "ui-altTabs-tab ui-corner-top ui-state-default ui-tab",
          role: "tab"
        }).appendTo(self);
        $("<span>", {
          id: "ui-id-" + ++currentUiCount,
          "data-rel": target,
          class: "ui-altTabs-anchor",
          role: "presentation",
        }).html(label).click(function(e) {
          self.find(".ui-tabs-active").removeClass("ui-tabs-active")
          .removeClass("ui-state-active");
          $(e.target).parent().addClass("ui-tabs-active ui-state-active");
          contentDivs.hide();
          $("#" + $(e.target).data("rel")).show();
        }).appendTo(item);
        console.log("Appending Item to list: ", item);
      });
      self.find("li:eq(0)").addClass("ui-tabs-active ui-state-active");
      for (i = contentDivs.length; i--; i >= 0) {
        var panel = contentDivs.eq(i);
        panel.addClass("ui-tabs-panel ui-corner-bottom ui-widget-content")
          .attr("role", "tabpanel")
          .insertAfter(self)
          .hide();
        if (i == 0) {
          panel.show();
        }
      }
    },
  });
  $("#tabs").altTabs();
});

【讨论】:

  • 我终于在我的应用程序中得到了这个主要工作。但是,新选项卡的可排序和悬停选择功能不起作用。此外,即使我修改了我的 CSS 以支持 altTabs 小部件,其呈现方式也与标准选项卡小部件不同。替代方案可以恢复这些功能吗?
猜你喜欢
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 2017-12-20
  • 1970-01-01
相关资源
最近更新 更多