Primeng 是否可以有条件地显示启动工具提示?
我正在使用启动工具提示,并且我只需要在输入无效时显示工具提示。我使用以下代码,但工具提示显示在悬停或焦点上 我尝试过使用tooltipDisabled和tooltipEventPrimeng 是否可以有条件地显示启动工具提示?,primeng,Primeng,我正在使用启动工具提示,并且我只需要在输入无效时显示工具提示。我使用以下代码,但工具提示显示在悬停或焦点上 我尝试过使用tooltipDisabled和tooltipEvent <input type="url" name="url" class="form-control" pattern="(https|http)?://.+" formControlName="url" [disabled]="flag2" pTooltip="Pl
<input type="url" name="url" class="form-control" pattern="(https|http)?://.+"
formControlName="url" [disabled]="flag2" pTooltip="Please enter URL in valid format"
tooltipPosition="left" tooltipEvent="focus">
预期:仅当输入框无效时才应显示工具提示
实际:工具提示显示在悬停或焦点上有黑客攻击。但这是一个黑客,我不建议这样做。由于预处理不会公开任何控制工具提示的方法,因此必须手动访问元素。下面是一种方法
d-none
具有display:none!重要的
property和其他类random类
使用jquery或javascript访问元素。使用jQuery,当输入无效时,我们将访问元素并删除classd-none
。必须在(focus)='onFocus()'函数中执行此检查
onFocus
功能中,如果输入字段无效,则从工具提示元素中删除d-none
类。如果输入字段有效,则将d-none
类添加到元素中<input type="text" pInputText pTooltip="Enter your username" placeholder="Right" tooltipStyleClass="d-none random-class" tooltipEvent="focus" (focus)="onFocus()">
Javascript/组件
onFocus() {
if (//input field invalid) {
setTimeout(() => {
$('.random-class').removeClass('d-none');
}, 100);
}
}
我不能再强调这是一个黑客的事实,我不建议这样做,但它完成了工作。如果您想在其他输入字段上复制该属性,那么每个字段都应该有不同的随机类名来访问该特定元素 所以简单的答案是:不,你不能 答案很长:您可以通过编程方式显示它,但它仍然会通过priming提供的唯一选项(onHover和/或onFocus)显示,除非您从元素中删除这些交互 以编程方式显示工具提示 您可以尝试并执行的是强制事件,该事件会触发附加到其上的元素上的工具提示。有几种方法可以用来查找元素,这不是您的问题,但是您可以通过在DOM上通过名称查找url输入字段来查找url输入字段
var element = document.getElementsByName("url")[0];
无论哪个验证失败,都可以使用该变量分派触发工具提示的事件
element.dispatchEvent(new Event('mouseenter'));
当元素有效时,还可以通过调度适当的事件使工具提示消失
element.dispatchEvent(new Event('mouseleave'));
正如我上面所说的,这不会阻止它在您悬停或集中输入时出现,但它回答了您关于如何实现的问题
防止标准行为的变通方法
为了不让工具提示在元素悬停或聚焦时出现,我建议您将其全部附加到另一个元素。您可以在输入字段旁边或输入字段中创建和连接。重要的是,您想要与之交互的不是字段本身。然后您可以使用CSS并使用工具提示no mouse events添加到元素中,例如通过类
.noPointerEvents {
pointer-events: none;
}
这将确保用户不会用鼠标激活工具提示。它只会通过前面给定的代码触发。如果您选择了一个可以通过选项卡切换的元素,您也可以禁用选项卡切换。如果文本字段无效,您是否禁用它?
.noPointerEvents {
pointer-events: none;
}