2015-04-01 77 views
-2

我试图获得元素上的文本显示在plunker中,第一次单击它显示正确的文本字符串,但如果再次单击它会显示两次和三次下一个,不确定如何防止它。任何帮助?获取单击标签元素的兄弟姐妹的文本

在此先感谢

http://plnkr.co/edit/efnFSDU1lkW8JvNzk4zz?p=preview

+3

这里是你的代码?什么是plnkr.co/edit/efnFSDU1lkW8JvNzk4zz?p=preview ? – dsharew 2015-04-01 14:46:28

+0

@rtpHarry,谢谢 – mahi 2015-04-01 14:50:08

+0

角度控制器并不意味着托管DOM代码。 – BiAiB 2015-04-01 14:52:45

回答

4

如果使用Angular你不需要使用jQuery事件,你可以通过$event您功能并从当前目标的文字,像这样

$scope.getWord = function ($event) { 
     alert(angular.element($event.target).text()); 
} 

<a class="refer-word" ng-click="getWord($event)">javascript</a> 
<a class="refer-word" ng-click="getWord($event)" name ="client">client</a> 

Example

0

只是在jQuery的

$(document).off('click').on("click", ".refer-word", function() { 
        var passedWord = $(this).text(); 
        alert(passedWord); 
}); 
0

正在注册的每个你点击一个元素时新的Click事件处理程序使用.off()

在我看来,最好的办法是写自己的指令:

var app=angular.module('myApp', []); 
 
app.controller('TestCtrl', ['$scope', function($scope) { 
 
    
 
}]); 
 

 
app.directive('showTooltip', function() { 
 
    return { 
 
    restrict: 'EA', 
 
    link: function(scope, element, attrs) { 
 
     element.addClass('refer-word'); 
 
     element.bind('click', function(){ 
 
     alert(element.text()); 
 
     }) 
 
    } 
 
    }; 
 
});
.refer-word { 
 
    color: black; 
 
    text-decoration: underline; 
 
    font-style: italic; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="myApp" ng-controller="TestCtrl"> 
 
    <div> 
 
    <div> 
 
     <p>it is a <data-show-tooltip>javascript</data-show-tooltip> framework for <data-show-tooltip>client</data-show-tooltip> side</p> 
 
    </div> 
 
    </div> 
 
</body>

+0

@ boindiil感谢您使用指令进行解释,我可以为其他用例保留这种想法。 – mahi 2015-04-01 18:45:11

0

你的事件绑定位置其实是错误的, 不动作里面绑定绑定,但里面控制器或任何初始位置(只有一次)

该动作可能被触发多次,它会重新重新绑定事件。这就是为什么所有事件当动作除了被调用,以结合另一个旨意被称为太

尝试这个例如

app.controller('TestCtrl', ['$scope', function($scope) { 
    //your event if you must have it this way 
    $(document).on("click", ".refer-word", function() { 
        var passedWord = $(this).text(); 
        //alert(passedWord); 
        console.log(passedWord); 
      }); 
    $scope.getWord = function(){ 
     //action to be done 
    } 
}]);