ProcedureChange-də(Ad: String) İstənilən sahənin dəyişdirilməsi və ya düyməyə basılması. Hadisə idarəedicisini və ya mənbəyini dəyişdirin Onchange hadisəsində veb formanı yenidən çəkin

_element">

Gövdə ( ekran: tor; şəbəkə şablonu sahələri: "nəticəni seçin"; ) seçin ( grid sahəsi: seçin; ) .nəticə ( grid sahəsi: nəticə; )

JavaScript

const selectElement = document.querySelector(".dondurma"); selectElement.addEventListener("dəyişiklik", (hadisə) => ( const result = document.querySelector(".result"); result.textContent = `Siz $(event.target.value)`; ));

nəticə

mətn daxiletmə elementi

Bəzi elementlər üçün, o cümlədən , idarəetmə fokusunu itirənə qədər dəyişiklik hadisəsi işə düşmür. Aşağıdakı sahəyə nəsə daxil etməyə cəhd edin və hadisəni işə salmaq üçün başqa yerə klikləyin.

HTML

JavaScript

const input = document.querySelector("giriş"); const log = document.getElementById("log"); input.addEventListener("dəyişiklik", updateValue); funksiya yeniləməValue(e) ( log.textContent = e.target.value; )

nəticə

Spesifikasiyalar

Spesifikasiya Vəziyyət
HTML Living Standard
Həmin spesifikasiyada “dəyişiklik” anlayışı.
Yaşayış Standartı

Brauzer uyğunluğu

Bu səhifədəki uyğunluq cədvəli strukturlaşdırılmış məlumatlardan yaradılıb. Məlumatlara töhfə vermək istəyirsinizsə, lütfən, https://github.com/mdn/browser-compat-data ünvanına daxil olun və bizə sorğu göndərin.

GitHub-da uyğunluq məlumatlarını yeniləyin

İş masasıMobil
ChromekənarFirefoxinternet ExplorerOperasafariandroid veb görünüşüAndroid üçün ChromeAndroid üçün FirefoxAndroid üçün operaiOS-da SafariSamsung İnternet
dəyişməkChrome Tam dəstək BəliEdge Tam dəstək 12Firefox Tam dəstək BəliIE Tam dəstək BəliOpera Tam dəstək BəliSafari Tam dəstək BəliWebView Android Tam dəstək BəliChrome Android Tam dəstək BəliFirefox Android Tam dəstək BəliOpera Android Tam dəstək BəliSafari iOS Tam dəstək BəliSamsung İnternet Android Tam dəstək Bəli

Əfsanə

Tam dəstək Tam dəstək

Fərqli brauzerlər hər zaman müəyyən qarşılıqlı əlaqə növləri üçün dəyişiklik hadisəsinin işə salınması ilə razılaşmırlar. Məsələn, elementdə klaviatura naviqasiyası seçimlər menyusunu təmin edən idarəetməni təmsil edir"> (bax səhv 126379). Firefox 63 (Quantum)-dan bəri bu davranış bütün əsas brauzerlər arasında uyğundur.

Mənim giriş elementim var və məzmunun uzunluğunu yoxlamağa davam etmək istəyirəm və uzunluq müəyyən ölçüyə bərabər olduqda, təqdim düyməsini işə salmaq istəyirəm, lakin JavaScript onchange hadisəsi ilə bağlı problemlə üzləşirəm, çünki hadisə yalnız aşağıdakı zaman işə düşür. giriş elementi məzmun dəyişdikdə deyil, əhatə dairəsindən kənarda çıxır.

Onchange adın məzmunu dəyişdikdə işə düşmür, ancaq ad diqqətdən kənara çıxanda işə düşür.

Bu tədbirin məzmunun dəyişdirilməsi üzərində işləməsi üçün nəsə etmək olarmı? və ya bunun üçün istifadə edə biləcəyim başqa bir hadisə? Onkeyup funksiyasından istifadə edərək həll yolu tapdım, lakin biz brauzerin avtomatik tamamlanmasından bəzi məzmun seçdiyimiz zaman o, işləmir.

Sahənin məzmunu dəyişdikdə işləyə biləcək bir şey istəyirəm, klaviatura və ya siçan... hər hansı bir fikir?

(funksiya () ( var oldVal; $("#name").on("textInput daxiletməsini dəyişdirin", funksiya () ( var val = this.value; if (val !== oldVal) ( oldVal = val; checkLength( val); ))) ) )());

Bu, dəyişiklik, düymə vuruşları, yapışdırmaq, textInput, daxiletmə (əgər varsa) tutacaq. Və lazım olduğundan artıq vurmayın.

İstifadəçi agenti bir və ya daha çox simvol olduqda bu hadisəni göndərməlidir. Bu simvollar müxtəlif mənbələrdən, məsələn, klaviatura cihazında düymənin basılması və ya buraxılması nəticəsində yaranan simvollar, daxiletmə metodu redaktorunun işlənməsi və ya səs əmri. Əgər "yapışdırmaq" əməliyyatı sadə simvol ardıcıllığını, yəni heç bir struktur və ya üslub məlumatı olmayan mətn keçidini yaradırsa, bu tip hadisə də yaradılmalıdır.

Blok sitat>

İstifadəçi dəyəri dəyişdikdə idarəetmələrdə işə salınır

Blok sitat>

Hər hansı bir fürsəti tutmaq istəyirsinizsə, onkeyup və onclick (və ya onmouseup) birləşməsindən istifadə etməlisiniz.

Budur, eyni problem üçün hazırladığım başqa bir həll. Bununla belə, mən çoxlu giriş sahəsindən istifadə edirəm, ona görə də köhnə dəyəri elementlərin özlərinin istifadəçi tərəfindən müəyyən edilmiş atributu kimi saxlayıram: “data-value”. jQuery istifadə edərək idarə etmək belə asandır.

$(sənəd).delegate(".filterBox", "keyup", ( self: this ), funksiya (e) ( var self = e.data.self; if (e.keyCode == 13) ( e.preventDefault( ); $(this).attr("data-value", $(this).val()); self.filterBy(this, true) ) else if (e.keyCode == 27) ( $(this). val(""); $(bu).attr("məlumat-dəyər", ""); self.filterBy(bu, doğru) ) başqa ( if ($(bu).attr("məlumat-dəyər") ! = $(bu).val()) ( $(bu).attr("data-dəyər", $(bu).val()); self.filterBy(bu); ) ) ));

burada 5-6 giriş sahəsindən istifadə etdim, filterBox sinifinə sahib oldum, yalnız verilənlərin dəyəri öz dəyərindən fərqli olduqda filterBy metodunu edirəm.

OnChange işləyicisi hər hansı bir giriş sahəsi dəyişdikdə və ya hər hansı düyməyə kliklədikdə çağırılır.

Ad arqumentində kiçik hərflə yazılmış giriş sahəsinin və ya düymənin adı var.

Nümunə: Prosedura OnChange(Ad: String); Başlayın // Əgər qiymət və ya kəmiyyət sahələri dəyişdirilibsə, onda məbləği hesablayınƏgər Name="qiymət" Və ya Ad="cnt" O zaman Summa:= RoundMul(Qiymət, Cnt, 2); // Əgər məbləğ sahəsi dəyişdirilibsə, onda qiyməti hesablayırıq.Əgər Name="summa" O zaman Qiymət:= If(Cnt=0, 0, RoundDiv(Summa, Cnt, 2)); son;

Oxşar effekt OnPriceChange, OnCntChange, OnSummaChange işləyicilərindən istifadə edərkən əldə edilə bilər.

Nümunə: OnPriceChange proseduru; Başlanğıc Cəmi:= RoundMul(Qiymət, Cnt, 2); son; ProcedureCntChange haqqında; Başlanğıc Cəmi:= RoundMul(Qiymət, Cnt, 2); son; ProcedureSummaChange haqqında; Başlanğıc qiyməti:= If(Cnt=0, 0, RoundDiv(Summa, Cnt, 2)); son;

Bu işləyici modulluğu təşkil edərkən istifadə etmək üçün əlverişlidir, çünki demək olar ki, bütün hadisələr haqqında məlumat toplayır. Misal üçün:

BaseClass: Variant; ProcedureCreate haqqında; Begin BaseDocument.Init(Self); // Baza sinfi yaradın və onunla əlaqə mübadiləsi aparın. Sənədin işə salınması. son; ProcedureChange-də(Ad: String); Begin BaseClass.OnChange(Ad); // Hadisələrin əsas sinfə ötürülməsi son;

Və ya singletondan istifadə edən modulluq nümunəsi (redaktorun Təsvir sekmesindəki modul xüsusiyyəti):

ProcedureCreate haqqında; Begin BaseClass.OnCreate(Self); // Sənədin işə salınması. son; ProcedureChange-də(Ad: String); Begin BaseClass.OnChange(Özünü, Adını); // Hadisələrin əsas sinfə ötürülməsi. son;

Verilmiş forma elementi üçün dəyişiklik işləyicisini təyin edir və ya bu hadisəni işə salır. Metodun üç istifadə halı var:

işləyici (eventObject)— işləyici kimi təyin olunacaq funksiya. Zəng edildikdə, o, hadisə obyektini alacaq eventObject .

işləyici (eventObject)- yuxarıya baxın.
hadisəData— işləyiciyə ötürülən əlavə məlumat. Onlar aşağıdakı formatda obyekt ilə təmsil edilməlidir: (fName1:value1, fName2:value2, ...) .

Unbind() metodundan istifadə edərək quraşdırılmış işləyicini silə bilərsiniz.

Metoddan istifadənin hər üç variantı digər metodların analoqudur (yuxarıya baxın), ona görə də change() funksiyasından istifadənin bütün təfərrüatları bu metodların təsvirində tapıla bilər.

Xatırladaq ki, dəyişiklik hadisəsi birbaşa dəyişiklik zamanı baş vermir, ancaq dəyişdirilmiş forma elementinin diqqəti itirildikdə.

Misal

// id foo olan elementə dəyişiklik hadisəsi işləyicisini təyin edin$("#foo" ) .dəyişiklik (funksiya () ( xəbərdarlıq () "Fo elementi dəyişdirildi.") ; } ) ; // foo elementində dəyişiklik hadisəsini çağırın$("#foo" ).change() ; // elementlərdə bu dəfə başqa bir dəyişiklik hadisəsi idarəedicisini qurun // sinif bloku ilə. İşləyiciyə əlavə məlumatları ötürün$(".block" ) .dəyişiklik (( a: 12 , b: "abc" ) , funksiya (eventObject) ( var externalData = "a=" + eventObject.data .a + ", b=" + eventObject.data .b ; xəbərdarlıq ( "Sinif bloku olan element dəyişdirildi."+ "Data bu hadisə idarəçisinə ötürüldü:"+ xarici verilənlər); ) ;