jQuery .Change () وظيفة لا تعمل مع قائمة اختيار ملزمة ديناميكيا

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

سؤال

لدي حقل محدد يتم ملؤه ديناميكيا مع مكالمة AJAX التي ببساطة إرجاع جميع خيارات تحديد HTML. هنا هو جزء من PHP الذي تعهد فقط علامات الاختيار ويملأ كل خيار / قيمة ديناميكيا.

echo "<select name='player1' class='affector'>";
echo "<option value='' selected>--".sizeof($start)." PLAYERS LOADED--</option>";

foreach ($start as $value) {
    echo "<option value='".$value."'>".$value."</option>";
 }  
  echo "</select>";
}  

بعد هذه القائمة مأهولة بالسكان، أحاول استدعاء حدث التغيير، بحيث يتم تغيير الخيار الافتراضي في قائمة تحديد أو في حقل نصي بنفس الفئة، فإنه يعطل زر راديو في جزء آخر من النموذج وبعد (يمكنك أن ترى السؤال الأولي الذي طلبت فيه الحصول على هذا الجزء من العمل هنا)

$('.affector').change(function(){
       $(this).parents('tr').find('input:radio').attr('disabled', false);
});

لسبب ما، على الرغم من أنني أعطي حقل SELECT اسم الفئة المناسبة (العياد)، عندما أقوم بتحديد خيارات مختلفة في هذا المجال، فإن الأجزاء الأخرى من النموذج لا تعطيل. حقل النص الثابت مع نفس الفصل يعمل بشكل جيد. أنا لاذع.

أيه أفكار؟

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

المحلول

علق للتو على سؤالك الأخير ... إليك ما قلته:

استخدام jquery bind.

function addSelectChange() {
   $('select').bind('change', function() {
       // yada yada
   });
} 

استدعاء addselectchange في وظيفة نجاح AJAX الخاص بك. يجب أن تفعل الخدعة. ألق نظرة على JQUERY LIVE EVENT TOO (عندما تريد تعيين أحداث لجميع عناصر DOM الحالية والمستقبلية في مشروع لاحق أو شيء ما). لسوء الحظ، فإن حدث التغيير وغير قليل من الآخرين غير مدعوم بعد مع مباشر. الربط هو أفضل شيء التالي

نصائح أخرى

إجابة أكثر حتى الآن ..

نظرا لأن العناصر ملطبة ديناميكيا، فأنت تبحث عن وفد الأحداث.

لا تستخدم .live()/.bind()/.delegate(), ، على أية حال. يجب عليك استخدامها .on().

بحسب ال مسج API Docs.:

اعتبارا من jQuery 1.7، .on() الطريقة هي الطريقة المفضلة لإرفاق معالجات الأحداث إلى مستند. للإصدارات السابقة، .bind() يتم استخدام الطريقة لإرفاق معالج الأحداث مباشرة على العناصر. يتم إرفاق المعالجين بالعناصر المحددة حاليا في كائن JQuery، بحيث يجب أن تكون هذه العناصر موجودة عند الإشارة إلى الدعوة .bind() يحدث. للحصول على مزيد من الحدث مرن، انظر مناقشة وفد الأحداث في .on().

لذلك سوف تستخدم شيئا مثل هذا:

$(document).on('change', 'select', function (e) {
    /* ... */
});

مثال باستخدام .Live ()

$('#my_form_id select[name^="my_select_name"]').live('change', (function () {
    console.log( $("option:selected", this).val());
    })
 );

بالنسبة للعناصر التي يتم إدراجها ديناميكيا في DOM، يجب أن تكون أحداثها ملزمة بها

$('.selector').bind('change',function() { doWork() });

هذا لأنه عند تشغيل $(function(){}); وربط الأحداث باستخدام $.click أو $.change, ، وما إلى ذلك، فأنت أحداث ملزمة للعناصر موجود بالفعل في دوم. وبعد أي التلاعب الذي تقوم به بعد ذلك لا يتأثر بكل ما يحدث في $(function(){}); يتصل. $.bind يروي صفحتك للبحث عن العناصر المستقبلية في محدد الخاص بك وكذلك تلك الحالية.

جرب.http://docs.jquery.com/events/live.

من المستندات: يربط معالجا لحدث (أعجبك النقر) لجميع العنصر الحالي والمقابل الحالي. يمكن أيضا ربط الأحداث المخصصة.

لقد وجدت كحل لجعل فقط

<select id="myselect"></select> 

في ملف PHP / HTML ثم إنشاء خيارات لذلك بواسطة AJAX:

$.post("options_generator.php", function (data) { $("#myselect").append(data); });

في Options_Generator.php Echo خيارات فقط:

echo "<option value='1'>1</option>";
echo "<option value='2'>2</option>";

استخدام المفوض () وظيفة بدلا من ذلك. المزيد عن ذلك هنا http://www.elijahmanor.com/differences-between-jquery-bind-vs-live-vs-delegate-vs-on/

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