2015-04-01 83 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 
    } 
}]);