كيف أقوم بتغيير التحديد برمجياً بحيث يقوم بتشغيل سلوك التغيير الخاص به؟

StackOverflow https://stackoverflow.com/questions/1224728

  •  22-07-2019
  •  | 
  •  

سؤال

يبدو أن هذا لا يعمل:

<select id="mySel" onchange="alert('foo')">
    <option value="a">a</option>
    <option value="b">b</option>
</select>

<script>
dojo.byId('mySel').value = 'b'; // select changes, but nothing is alerted
</script>

(أنا أستخدم dojo، لكن هذا لا يهم حقًا.)

هل كانت مفيدة؟

المحلول

وو"عند_التغيير 'اسم مضلل قليلا إلا إذا كنت أفهم أن تغيير الحدث وقيمة يتم تغيير ليست نفس الشيء. يحدث حدث تغيير عندما يقوم المستخدم بتغيير القيمة في المتصفح. أعتقد أنك يمكن إطلاق الحدث يدويا عن طريق الاتصال dojo.byId('mySel').onchange() بعد برمجيا تغيير القيمة، وإن كان. (قد تحتاج إلى تحديد الواقع وظيفة يدعو alert، وإن كان. أنا لم تكن قد فعلت ذلك بنفسي.)

نصائح أخرى

وهذا سيغير قيمة ولكن لم يبدأ الحدث onchange. أي وقت قمت بتعديل عنصر مع جافا سكريبت فإنه لن إطلاق الحدث (توقف لكم من الدخول في القضايا العودية *).

إذا قمت بإعداد معالج حدث مثل ذلك.

function myHandler(){
  //do whatever stuff here
  changeColor( dojo.byId('mySel') );
}

وبعد ذلك يمكنك الاتصال هذه على حدة، بعد تعيين القيمة برمجيا.

ملحوظة (*): أنا لست خبير دوجو ... لذلك أنا على افتراض أنها لم "وأضاف" الدعوة التلقائي للمعالجات الأحداث عند تعيين قيمة من جافا سكريبت

بإمكانك إلقاء نظرة على هذه الأسئلة وإجاباتها:قد يساعدون:

لشخص يتطلع إلى تشغيل الحدث change باستخدام جافا سكريبت.

        var evObj = document.createEvent("HTMLEvents");
        evObj.initEvent("change", true, true);
        var elem = document.getElementById('some-id');
        elem.dispatchEvent(evObj);

ويمكنك الوصول إلى الحدث "onpropertychange" أنه يحتوي على خاصية داخل الوسائط الحدث لتحديد أي ممتلكات تم تغييره.

ويكشف كل من "selectedIndex" والتغييرات 'قيمة' - مجرد حالة اختبار "PROPERTYNAME '

<select id="mySel" onpropertychange="dothis(event);">
    <option value="a">a</option>    
    <option value="b">b</option>
</select>

function dothis(event)
{

    if (event.propertyName == "selectedIndex")
            alert('selection changed');
}

ومن على قمة رأسي ... (حاليا باستخدام إطار asp.net شبيبة الذي هو تماما مختلفة أبيت)

وحاول إسناد selectedIndex بدلا من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top