1つまたは複数のクリック可能なアイテム (入力フィールドやボタンなど)blur
を含むコンテナー (この場合はテーブル セル) にイベントを関連付けています。
私のセル埋め込みフォームでは、2 つのことが起こります。入力フィールドのいずれかで値が変更されると、フォームが処理されます。値が変更されていないのにフォーカスが失われた場合、フォームはクリアされます。
blur
ユーザーがセル内の別の項目をクリックした場合、セルを変更したくありません。
これが私が試みたことです-blur
イベントでフォーカスされた子供の数をチェックします。
HTML
<table>
<tr>
<td id="edit">
<input type="text"></input>
<input type="checkbox"></input>
<button>Test</button>
</td>
</tr>
</table>
JavaScript
$('table').on('change', '#edit input', function () {
alert('An input field has changed');
});
$('table').on('blur', '#edit', function () {>
if ($(this).children(':focus').length == 0) {
alert('The user has clicked away from the form');
} else {
alert('The user hasn\'t finish editing yet');
}
});
しかし残念なことに、フォーカスされた子の長さは常に 0 として報告されます!
それから私は試しました
$('body').not('#edit, #edit > *').on('focus', function () {
alert('The user has clicked something else');
});
しかし、これはまったく機能しません!また、ユーザーが変更を加えた場合にフォームがキャンセルされないように、ハンドラーのchange
前にハンドラーを起動する必要があるため、それについても疑わしいです。focus
怠惰な子供のための jsfiddle は次のとおりです: http://jsfiddle.net/QmVsr/