我正在尝试使用l()
来获取类似的信息<a href='#' ...>
,以进行Ajax调用。 /programming/1698453/drupal-creating-anchor-only-link-with-l非常接近正确的东西-使用l()
诸如这样的选项'fragment' => 'foo'
来产生类似的链接<a href='#foo'...>
-但我试图得到一个干净的“#”。有什么方法可以执行此操作,还是我应该在片段中放入一些内容而不用担心呢?
我正在尝试使用l()
来获取类似的信息<a href='#' ...>
,以进行Ajax调用。 /programming/1698453/drupal-creating-anchor-only-link-with-l非常接近正确的东西-使用l()
诸如这样的选项'fragment' => 'foo'
来产生类似的链接<a href='#foo'...>
-但我试图得到一个干净的“#”。有什么方法可以执行此操作,还是我应该在片段中放入一些内容而不用担心呢?
Answers:
如果您不能在片段中使用干净的“#”,建议您使用<a href="javascript:">link</a>
。
将“ javascript:”或“ javascript:void(0)”添加到href
属性时,<a>
标记将不执行任何操作。然后,您可以将“ onclick”绑定到链接以实现ajax目的。
您可以使用l()
以下函数来实现此目的:
l('link', 'javascript:', array('external' => TRUE));
javascript:
和javascript:void(0)
一样。唯一的区别是“ void(0)” :)
PHP类型转换流行测验时间!(完全披露:我没有在我们的办公室获胜)。
如前所述,这是l()
我们关注的代码:
if (isset($options['fragment']) && $options['fragment'] !== '') {
$options['fragment'] = '#' . $options['fragment'];
}
所以这是一个问题:哪个值强制转换为空字符串但传递以下内容?
(isset($var) && $var !== '')
答案是:FALSE
!
因此,我们可以尝试这样:
l(t('My link'), NULL, array('fragment' => FALSE));
这给了我们:
<a href="/#">My link</a>
值得庆幸的是,我们可以通过传递以下内容来去除前导斜线external => TRUE
:
l(t('My link'), NULL, array('external' => TRUE, 'fragment' => FALSE));
这给了我们:
<a href="#">My link</a>
繁荣。我们为避免手动连接html字符串而做的事情,是吗?
后记:
我不确定我是否真的建议在正常情况下从php打印这样的链接。如果没有您的JavaScript,所有这些链接都将使您的用户跳至页面顶部(令我有些惊讶的是指定行为)。它应该指向没有JavaScript的地方。
如果链接真的才有意义与JavaScript各地(如为控制一个JS-仅幻灯片或某事),我认为这是最好的链接使用JavaScript添加到页面中。另外,如果您确实想将其放入源中,请确保display:none
默认情况下已将其选中。Drupal .js
在html上具有该类,可用于在出现javascript时显示它。
不幸的是,该url()
函数(l()
内部调用)几乎没有任何可能产生空片段的可能性,其内容如下:
if (isset($options['fragment']) && $options['fragment'] !== '') {
$options['fragment'] = '#' . $options['fragment'];
}
它检查以确保片段不是一个空字符串,这是您需要传递的字符串以获取clean #
。我认为最简单的解决方案是在页面中某个位置选择合适元素的ID,然后将其用于片段(或javascript:void
如Sithu所述)。
但是...最可访问的方式(以及随后在许多国家(地区)以法律方式;认为在美国的第508节,在英国的DDA等)将提供通过您的链接加载/调整的内容一个单独的页面,并使用该页面的URL作为链接的href。然后,您将使用javascript阻止链接上的事件实际重定向那些启用了该事件的浏览器的页面。
这样,您就可以为没有javascript的用户提供备用内容,可以保持合法状态,并且可以使每个人和他们的狗都开心:)
print drupal_json_output($output)
在我的ajax调用页面中使用过。
我只是遇到了同样的问题,但是没有一个令人满意的解决方案,所以我想出了自己的一个解决方案:
l('link', '', array('fragment' => ' ', 'html' => TRUE, 'external' => TRUE));
这产生干净 #
<a href="#">link</a>
<a href="# ">link</a>
给我带来了。
javascript:void(0)