Jak podkreślił @Felix Króla
Ponieważ obraz nie jest to element w dokumencie, nie wywoła zdarzeń i nie można powiązać obsługi do niego. Musisz użyć obejścia zastępczego .
Oto możliwe obejście (w jquery, ale może równie dobrze być POJS).
CSS
.wrapper {
padding: 1px;
display: inline-block;
border: 2px LightGray inset;
}
.wrapperFocus {
border: 2px DarkGray inset;
}
.textInput {
padding: 0;
border:none;
outline: none;
height: 20px;
width: 150px;
}
.cross {
float: right;
height: 20px;
width: 20px;
background-image:url('http://s20.postimg.org/6125okgwt/rough_Close.png');
background-repeat:no-repeat;
background-position: center;
background-size:90%;
cursor: pointer;
}
HTML
<fieldset class="wrapper">
<input type="text" class="textInput" /><span class="cross"></span>
</fieldset>
<fieldset class="wrapper">
<input type="text" class="textInput" /><span class="cross"></span>
</fieldset>
<fieldset class="wrapper">
<input type="text" class="textInput" /><span class="cross"></span>
</fieldset>
<hr>
<button>submit</button>
JavaScript
$(document).on("click", "span.cross", function() {
$(this).prev().val("");
}).on("focus", "input.textInput", function() {
$(this).parent().addClass("wrapperFocus");
}).on("blur", "input.textInput", function() {
$(this).parent().removeClass("wrapperFocus");
});
Na jsfiddle
Albo, jeśli chcesz to zrobić bez dodatkowego CSS i HTML, to powinno być w wielu przeglądarkach (POJS, ponieważ już masz przykład jquery).
CSS
.cross {
height: 20px;
width: 150px;
background-image:url('http://s20.postimg.org/6125okgwt/rough_Close.png');
background-repeat:no-repeat;
background-position:right center;
background-size:10% 90%;
z-index: -1;
padding-right: 6%;
}
HTML
<input type="text" class="cross" />
<input type="text" class="cross" />
<input type="text" class="cross" />
<hr>
<button>submit</button>
JavaScript
function normalise(e) {
e = e || window.event;
e.target = e.target || e.srcElement;
return e;
}
var getWidth = (function() {
var func;
if (document.defaultView.getComputedStyle) {
func = document.defaultView.getComputedStyle;
} else if (target.currentStyle) {
func = function (t) {
return t.currentStyle;
}
} else {
func = function() {
throw new Error("unable to get a computed width");
}
}
return function (target) {
return parseInt(func(target).width);
};
}());
function isInputCross(target) {
return target.tagName.toUpperCase() === "INPUT" && target.className.match(/(?:^|\s)cross(?!\S)/);
}
function isOverImage(e) {
return (e.clientX - e.target.offsetLeft) > getWidth(e.target);
}
function clearCrossInput(e) {
e = normalise(e);
if (isInputCross(e.target) && isOverImage(e)) {
e.target.value = "";
}
}
document.body.onclick = (function() {
var prevFunc = document.body.onclick;
if ({}.toString.call(prevFunc) === "[object Function]") {
return function (ev) {
prevFunc(ev);
clearCrossInput(ev);
};
}
return clearCrossInput;
}());
Na jsfiddle
Ale jeśli chcesz zmienić kursor gdy unosił się nad wtedy będziesz musiał wykonać dodatkową pracę. W ten sposób (równie dobrze można to zrobić z jquery).
JavaScript
function hoverCrossInput(e) {
e = normalise(e);
if (isInputCross(e.target)) {
if (isOverImage(e)) {
e.target.style.cursor = "pointer";
return;
}
}
e.target.style.cursor = "";
}
document.body.onmousemove = (function() {
var prevFunc = document.body.onmousemove;
if ({}.toString.call(prevFunc) === "[object Function]") {
return function (ev) {
prevFunc(ev);
hoverCrossInput(ev);
};
}
return hoverCrossInput;
}());
Na jsfiddle
Niewiarygodnie dobre i trudne pytanie. – DevlshOne
Szczerze mówiąc, myślę, że jedynym sposobem podejścia do tego jest sposób, w jaki nie chcesz, umieszczanie obrazu nad polem wprowadzania (lub zawieszanie go z prawej krawędzi), a następnie dynamiczne zajmowanie się położeniem i wielkością samych nakładów . – DevlshOne
Łącze w ten sposób nie działa. Nie rozumiem, co próbujesz osiągnąć. – sandino