如何在main.js中的e.preventDefault()之后在一个页面上启用默认值?

时间:2015-09-24 13:55:04

标签: javascript

我搜索了stackoverflow,并且有一些关于这个问题的主题,但不完全是我正在寻找的。我正在使用的wordpress主题最近更新,现在在他们的main.js中有这个 - 折叠数据-api:

$(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
var $this   = $(this), href;
var target  = $this.attr('data-target')
    || e.preventDefault()
    || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, ''); //strip for ie7
var $target = $(target);
var data    = $target.data('bs.collapse');
var option  = data ? 'toggle' : $this.data();
var parent  = $this.attr('data-parent');
var $parent = parent && $(parent);

if (!data || !data.transitioning) {
  if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed');
  $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed');
}

$target.collapse(option);
});

问题是,行e.preventDefault()阻止了页面下拉菜单中的链接打开了链接到的内容部分(页面上有#divs,点击后会显示 - display:none - > display:block;

无论如何,我的问题是 - 我可以为整个页面启用默认操作吗?我只需要这个特定的页面,我不能更改main.js代码,因为它会影响其他页面。我找到的所有解决方案都是关于使用onclick返回true,但是我想在页面内容中放置一个<script>...</script>,这样就可以启用此页面的默认操作 - 像负载或其他东西。如果它甚至可能或者必须连接到事件?对不起,我不是JavaScript程序员,我只需要修复更新搞砸的内容..

感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

根据您提供的代码,e.preventDefault()仅在相关[data-toggle=collapse]元素没有data-target属性时才会被点击:

var target  = $this.attr('data-target')
              || e.preventDefault()
              || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '');

这是做什么的:

  1. 尝试将$this.attr('data-target')的值分配给target变量。
  2. 如果元素上不存在data-target属性,请将其设置为调用e.preventDefault()的结果。
  3. 如果失败(由于e.preventDefault()始终没有返回任何内容,请将其设置为元素href,替换几位。
  4. 如果您的元素具有e.preventDefault()属性,则不会点击data-target

    <div data-target="..." data-toggle=collapse></div>