$ matCheckbox.click()仅在我用鼠标点击某处之前有效

时间:2017-11-26 16:00:45

标签: javascript jquery angular

我已经为JavaScript / jQuery中的Google AdWords界面编写了一些改进,这些改进将通过Greasemonkey插入到html代码中。 请参阅:https://www.internet-marketing-inside.de/AdWords/usability-booster.html

除此之外,我通过在行的开头点击复选框或者移动鼠标并按住shift / ctrl来改进用户界面的可用性。 但是,谷歌开发了一个新的界面,不再使用普通的复选框,现在我有一个奇怪的问题。

$matCheckbox.click();效果很好,直到我用鼠标点击页面上的某个位置。从那时起,.click()被忽略。有人有想法吗?

$(document).on("mouseenter", ".particle-table-row", function(e){
 var $row = $(this);
 var $matCheckbox = $row.find("mat-checkbox");
 if (typeof($matCheckbox.attr("checked")) == "undefined") {
  if (e.shiftKey === true) {
   $matCheckbox.click();
  }
 } else {
  if (e.ctrlKey === true) {
   $matCheckbox.click();
  }
 }
});

mat-checkbox看起来像angular.io,但我不确定。

<mat-checkbox tabindex="0" indeterminate="false"><div class="particle-ripple-container" delegate-events="" style="pointer-events: none; width: 48px; height: 48px; transform: translate(-16px, -1px);"></div><div class="mat-checkbox-container" delegate-events="" style="border-color: rgb(117, 117, 117);"></div></mat-checkbox>

由于       霍尔格

1 个答案:

答案 0 :(得分:0)

在没有太多上下文和任何方式测试我的解决方案的情况下,这里有一些假设。

Google将其Angular框架(版本高于2)用于其新的AdWords用户界面。因为Angular具有内部管理DOM状态的非常复杂的方式(更改检测等),所以很难在您尝试从“外部”访问的那一层上干扰它。 (Greasemonkey,Tampermonkey等)。

我认为这就是为什么您会得到那些奇怪的效果。

您可以尝试的另一种方法是仅设置dom元素的属性。也许这可行,但是您必须确保它正确触发了AdWords用户界面的“点击”事件(例如选择整行或其他内容)

$matCheckbox.attr('checked', !$matCheckbox.attr('checked') || false))

它使用jquery方法.attr设置与当前值相反的值(或者false设置为当前值的相反值)。

如果这不起作用,您应该看看this

此外,我还发现了this,但它的AngularJS(Angular 1)在内部的工作方式与最新版本完全不同。