두 이벤트를 연결할 수 없으며 setTimeout (...)를 기다리는 blur 이벤트 핸들러에서 말하면 100ms입니다. 그런 다음 클릭 핸들러에서 setTimeout의 콜백이 양식 필드의 값을 지우기 전에 확인하는 플래그를 true로 설정합니다.
편집 : 당신은에 복사하여 HTML 파일에 붙여 넣기, 저장 한 다음로드 할 수 있어야한다
<!DOCTYPE HTML>
<html>
<head>
<title>Filter Blur Demo</title>
</head>
<body>
<table>
<tbody>
<tr>
<th>Apples</th>
<td><input type="text"> <button class="glyphicon-filter">Filter...</button>
(defaults)</td>
</tr>
<tr>
<th>Oranges</th>
<td><input type="text" data-filter-icon-timeout="2000"> <button class="glyphicon-filter">Filter...</button>
(custom timeout)</td>
</tr>
<tr>
<th>Bananas</th>
<td><input type="text" data-filter-icon-selector="a"> <a href="#" class="glyphicon-filter">Filter...</a>
(custom filter icon selector)</td>
</tr>
</tbody>
</table>
<ol>
<li>
<label>Peaches</label>
<input type="text"
data-filter-icon-container="li"
data-filter-icon-timeout="250"
data-filter-icon-selector="a"
data-filter-cleared-out-selector="label"
data-filter-cleared-out-value="n/a">
<a href="#" class="glyphicon-filter">Filter...</a>
(everything but the kitchen sink)
</li>
</ol>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
function filterBlurred(event) {
//console.info("blur");
var input = event.target,
filterIconSelector = input.getAttribute("data-filter-icon-selector") || ".glyphicon-filter",
containerSelector = input.getAttribute("data-filter-icon-container") || "tr",
clearedOutSelector = input.getAttribute("data-filter-cleared-out-selector") || "th",
clearedOutValue = input.getAttribute("data-filter-cleared-out-value") || " ",
timeout = Number(input.getAttribute("data-filter-timeout")) || 250,
$row = $(input).closest(containerSelector),
$icon = $row.find(filterIconSelector),
clearInput = function() {
if (!input.value) {
if ($icon.attr("data-filter-icon-clicked") !== "yes") {
$row.find(clearedOutSelector).html(clearedOutValue);
}
$icon.attr("data-filter-icon-clicked", "");
}
};
setTimeout(clearInput, isNaN(timeout) ? 250 : timeout);
}
function glyphiconFilterClicked(event) {
event.target.setAttribute("data-filter-icon-clicked", "yes");
//console.info("click", event.target);
event.preventDefault();
// do other stuff
}
$(document)
.on("blur", "input", filterBlurred)
.on("click", ".glyphicon-filter", glyphiconFilterClicked);
</script>
</body>
</html>
당신이 의도 한대로 내가 일을 생각 일부 작업 코드 ... 브라우저. 그것은 Firefox에서 나를 위해 일하고있다.
이 경우 "플래그"는 icon 요소의 HTML5 data- * 속성입니다. 이것은 매우 커스터마이징 가능하고 재사용 가능하게 만듭니다.
'모든 것을 제거합니다'는 무엇을 의미합니까? 다시 설정됩니까? – Sekai
해당 행에있는 모든 th 요소는 그 안에있는 html을 바꿀 수없는 공백으로 대체하여 지 웁니다. –