I am working on an inventory system, and at the moment I am studying the replacement of inventory spots. I currently have a hierarchy:

Now, what I noticed when I exchange it works only if I had to change the word, for example, in inventory slot 1 with inventory slot 4. BUT, if I have to change it, for example, inventory slot 4 with inventory slot 1 my OnPointerEnter and OnPointerExit are not logged, should this be correct? This seems to be a hierarchy problem, and I don't know how to solve it.
Swap GIF and screenshot of my GameObject slot machine:
http://imgur.com/kS1C1TL - GIF

Code of my OnPointers for Inventory_Slot script:
public static GameObject itemBeingDragged;
public static GameObject itemCurrentlyOn;
public void OnPointerEnter(PointerEventData data){
itemCurrentlyOn = gameObject;
}
public void OnPointerExit(PointerEventData data){
itemCurrentlyOn = null;
}
public void OnPointerUp(PointerEventData data){
if(itemBeingDragged != null){
print (itemCurrentlyOn);
if(itemCurrentlyOn != null && itemCurrentlyOn != gameObject){
GetComponentInParent<Inventory> ().SwapInventorySlots (itemBeingDragged.GetComponent<Inventory_Slot> (), itemCurrentlyOn.GetComponent<Inventory_Slot> ());
}
itemBeingDragged = null;
rectTrans.localPosition = localRectTrans;
}
}
public void OnBeginDrag(PointerEventData data){
if(isItem){
itemBeingDragged = gameObject;
}
}
, Inventory 5 Inventory 1 , , . GIF, :
:

http://imgur.com/rjueuYK - GIF
- Unity, , ?