最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - ng-mouseover on disabled button in Angularjs - Stack Overflow

programmeradmin4浏览0评论

I want to use mouseover when the button is disabled. In the below code mouseover will work if ng-disabled="false" but it won't work if ng-disabled="true".

<body ng-app="ngAnimate">
  <button ng-disabled="true" ng-mouseover="show=true" ng-mouseleave="show = false">
    Mouseover
  </button>
  <div>
  Show:
    <span class="test" ng-show="show">
      I show up when your mouse enter on button
    </span>
  </div>

</body>

I want to use mouseover when the button is disabled. In the below code mouseover will work if ng-disabled="false" but it won't work if ng-disabled="true".

<body ng-app="ngAnimate">
  <button ng-disabled="true" ng-mouseover="show=true" ng-mouseleave="show = false">
    Mouseover
  </button>
  <div>
  Show:
    <span class="test" ng-show="show">
      I show up when your mouse enter on button
    </span>
  </div>

</body>
Share Improve this question edited Jun 30, 2015 at 8:54 Arulkumar 13.2k14 gold badges49 silver badges75 bronze badges asked Jun 30, 2015 at 7:38 Akash RaoAkash Rao 9283 gold badges12 silver badges25 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 12

It's not possbile. Actually it has nothing to do with Angular. It's expected behaviour when browsers are not supposed to fire onmouseover, onclick, etc. events on disabled form controls. So you can't do it directly.

Can't do it directly - meaning, that you can bind mouseover even to wrapping container which would not have this limitation. Then you would need to control action and proceed only if disabled flag is true or false if you need.

That being said, you should probably not try to workaround this behaviour. Form UX perspective disabled control should not be interaction-able, after all that's what disabled means.

I recently faced a similar problem where i disable a submit button on a form unless the form is valid. When the user hover over the disabled button, I wanted all required fields to get a different color.

I solved this using a html structure like this:

<div ng-class="{error: showError}">
    <div disabled-wrapper ng-mouseenter="checkValid()" ng-mouseleave="showError = false">
        <div><button ng-disabled="!valid">Next</button></div>
    </div>
</div>

And css like this:

[disabled-wrapper] {
    position: relative;
    z-index: 0;
}
[disabled-wrapper] [disabled] {
    position: relative;
    z-index: -1;
}

And controller function:

$scope.checkValid = function() {
    $scope.showError = !$scope.valid;
}

// I have more logic regarding validity of form.

// I am not sure why the div within the wrapper is needed (but it is).

// The positioning and z-index of the wrapper prevents any parent element with back-ground color from overshadowing the disabled button.

发布评论

评论列表(0)

  1. 暂无评论