Chromeでは、ユーザーがクリアボタンをクリックすると、検索入力で「検索」イベントが発生します。
Internet Explorer 10のJavaScriptで同じイベントをキャプチャする方法はありますか?
Chromeでは、ユーザーがクリアボタンをクリックすると、検索入力で「検索」イベントが発生します。
Internet Explorer 10のJavaScriptで同じイベントをキャプチャする方法はありますか?
私が最終的に見つけた唯一の解決策:
// There are 2 events fired on input element when clicking on the clear button:
// mousedown and mouseup.
$("input").bind("mouseup", function(e){
var $input = $(this),
oldValue = $input.val();
if (oldValue == "") return;
// When this event is fired after clicking on the clear button
// the value is not cleared yet. We have to wait for it.
setTimeout(function(){
var newValue = $input.val();
if (newValue == ""){
// Gotcha
$input.trigger("cleared");
}
}, 1);
});
oninput
イベントは、空の文字列に設定this.value
して発生します。検索ボックスを X でクリアするか、バックスペースを使用してクリアするかに関係なく、同じアクションを実行したいので、これで問題は解決しました。これは IE 10 でのみ機能します。
input
代わりに使用してください。すべてのブラウザで同じ動作で動作します。
$(some-input).on("input", function() {
// update panel
});
なぜだめですか
$("input").bind('input propertychange', function() {
if (this.value == ""){
$input.trigger("cleared");
}
});
この質問には回答済みですが、受け入れられた回答は私たちの状況では機能しませんでした。IE10 はステートメントを認識/起動しませんでした$input.trigger("cleared");
。
私たちの最終的な解決策は、そのステートメントを ENTER キーのキーダウン イベント (コード 13) に置き換えました。後世のために、これは私たちの場合に機能したものです:
$('input[type="text"]').bind("mouseup", function(event) {
var $input = $(this);
var oldValue = $input.val();
if (oldValue == "") {
return;
}
setTimeout(function() {
var newValue = $input.val();
if (newValue == "") {
var enterEvent = $.Event("keydown");
enterEvent.which = 13;
$input.trigger(enterEvent);
}
}, 1);
});
さらに、このバインディングをページ上のすべての入力ではなく、「検索」入力にのみ適用したいと考えました。当然、IE もこれを困難にしました... をコーディング<input type="search"...>
しましたが、IE はそれらを としてレンダリングしましたtype="text"
。そのため、jQuery セレクターはtype="text"
.
乾杯!
input
イベントを聞くだけです。詳しくはリファレンスをご覧ください。これは、IE 上の Sencha ExtJS のクリア ボタンの問題を修正した方法です。
Ext.define('Override.Ext.form.field.ComboBox', {
override: 'Ext.form.field.ComboBox',
onRender: function () {
this.callParent();
var me = this;
this.inputEl.dom.addEventListener('input', function () {
// do things here
});
}
});
私の場合、上記のコードは機能していませんでした.1行を変更$input.typeahead('val', '');
して、私の場合に機能するものを紹介しました..
// There are 2 events fired on input element when clicking on the clear button:// mousedown and mouseup.
$("input").on('mouseup', function(e){
var $input = $(this),
oldValue = $input.val();
if (oldValue === ''){
return;
}
// When this event is fired after clicking on the clear button // the value is not cleared yet. We have to wait for it.
setTimeout(function(){
var newValue = $input.val();
if (newValue === ''){
$input.typeahead('val', '');
e.preventDefault();
}
}, 1);
});