Chrome'da, kullanıcı temizle düğmesini tıkladığında arama girişlerinde "arama" olayı tetiklenir.
Internet Explorer 10'da javascript'te aynı olayı yakalamanın bir yolu var mı?
Chrome'da, kullanıcı temizle düğmesini tıkladığında arama girişlerinde "arama" olayı tetiklenir.
Internet Explorer 10'da javascript'te aynı olayı yakalamanın bir yolu var mı?
Yanıtlar:
Sonunda bulduğum tek çözüm:
// 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
bunun yerine olayı kullanmaktır. X simgesine bastığınızda input
olay tetiklenir.
if (oldValue === "")
mı?
input
-event ile çözümü işe yararken, bu çözüm yalnızca öğe temizlendiğinde tetiklenirken, Lucent'in de imleç öğeye girdiğinde, öğeden ayrıldığında ve ayrıca veri girildiğinde ateşlenir.
oninput
Olay ile ateşler this.value
boş bir dizeye seti. Bu, benim için sorunu çözdü, çünkü arama kutusunu X ile veya geriye doğru boşluk bırakarak temizlesinler aynı eylemi yürütmek istiyorum. Bu yalnızca IE 10'da çalışır.
inputEl.addEventListener('input', function(){ /* DoSomething */ })
.
input
Bunun yerine kullanın . Tüm tarayıcılarda aynı davranışla çalışır.
$(some-input).on("input", function() {
// update panel
});
Neden olmasın
$("input").bind('input propertychange', function() {
if (this.value == ""){
$input.trigger("cleared");
}
});
Bu sorunun yanıtlandığını biliyorum, ancak kabul edilen yanıt bizim durumumuzda işe yaramadı. IE10 ifadeyi tanımadı / ateşlemedi $input.trigger("cleared");
.
Nihai çözümümüz, bu ifadeyi ENTER tuşundaki bir keydown olayıyla değiştirdi (kod 13). Gelecek nesil için, bizim durumumuzda işe yarayan buydu:
$('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);
});
Ayrıca, bu bağlamayı sayfadaki her girişe değil, yalnızca "arama" girişlerine uygulamak istedik. Doğal olarak, IE de bunu zorlaştırdı ... kodlamamıza rağmen <input type="search"...>
, IE onları olarak yaptı type="text"
. Bu nedenle jQuery seçicisi type="text"
.
Şerefe!
Sadece input
olayı dinleyebiliriz . Bakınız başvuru detayları için. IE'de Sencha ExtJS'de temizle düğmesiyle ilgili bir sorunu şu şekilde düzelttim:
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
});
}
});
Kutudan çıkan bir çözüm, X'ten tamamen CSS ile kurtulmaktır:
::-ms-clear { display: none; } /* see /programming/14007655 */
Bunun aşağıdaki faydaları vardır:
asp.net sunucu kontrolüm için
<asp:TextBox ID="tbSearchName" runat="server" oninput="jsfun_tbSearchName_onchange();"></asp:TextBox>
js
function jsfun_tbSearchName_onchange() {
if (objTbNameSearch.value.trim() == '')
objBTSubmitSearch.setAttribute('disabled', true);
else
objBTSubmitSearch.removeAttribute('disabled');
return false;
}
ref
MSDN onchange olayı - IE10'da test edildi.
... veya CSS ile gizlemek için:
input[type=text]::-ms-clear { display: none; }
Yukarıdaki kod benim durumumda çalışmıyordu ve bir satırı değiştirdim ve $input.typeahead('val', '');
benim durumumda hangisinin çalıştığını tanıttım ..
// 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);
});