الحصول على القيمة المحددة من المربع المنسدل في نموذج html دون إرسال

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

سؤال

كيفية الحصول على نص العنصر المحدد من عنصر المربع المنسدل في نماذج html؟(باستخدام Python) كيف يمكنني تخزين القيمة إلى متغير ، عندما أقوم بتحديد عنصر واحد من المربع المنسدلة باستخدام الماوس؟(أي.بدون استخدام زر الإرسال)

هذا لتطبيق أقوم به في محرك التطبيقات الذي يدعم لغة Python فقط.

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

المحلول

يظهر سؤالك بعض سوء الفهم حول كيفية القيام بذلك تطبيقات الويب عمل.

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

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

يمكن أن يحدث ذلك في العديد من المواقف، وأكثرها شيوعًا:

  • ينقر المستخدم على رابط إلى عنوان URL آخر ، مما يجعل المتصفح يرسل طلبًا آخر إلى عنوان URL الجديد هذا.
  • ينقر المستخدم على submit زر ، جعل المتصفح يرسل النموذج كطلب إلى العنوان الذي تم تكوينه في النموذج action يصف.
  • بعض التعليمات البرمجية الموجودة في الصفحة الفعلية، عادةً ما تكون مكتوبة ECMAscript (المعروف أيضًا باسم جافا سكريبت)، يقدم طلبًا تحت الغطاء.

هذا الأخير هو ما تريد.يجب عليك الكتابة في جافا سكريبت بعض التعليمات البرمجية لجعل المتصفح يرسل المعلومات المختارة في القائمة المنسدلة إلى الخادم.بهذه الطريقة يمكن لرمز بايثون الموجود على الخادم أن يفعل شيئًا حيال ذلك.

الطريقة البسيطة للقيام بذلك هي عن طريق صنع onchange حدث القائمة المنسدلة قم بإرسال:

<select name='myfield' onchange='this.form.submit()'>
<option .... >
...
</select>
</form>

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

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

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

بمعنى آخر، يتم تشغيل التعليمات البرمجية المكتوبة بلغة جافا سكريبت في المتصفح محادثات إلى الكود المكتوب بلغة بايثون الذي يعمل في الخادم.

نصائح أخرى

ورمز الثعبان لديك يعمل على الخادم (جوجل إلى AppEngine). يعمل شكل HTML على العميل (في المتصفح). العميل والخادم التواصل من خلال بروتوكول HTTP. يرسل العميل <م> طلبات ، وخادم يستجيب مع الردود . عليك أن ترسل شيئا إلى الخادم، والسماح كود الثعبان بك معرفة إجراءات المستخدم.

وعلى جانب العميل يمكنك استخدام جافا سكريبت (النظر في استخدام مكتبة مسج). ربما يمكنك الحصول على الفور دون الاتصال بالخادم.

إذا كان لديك للاتصال بالخادم ولكن لا نريد لإعادة تحميل الصفحة، استخدم في تقنية AJAX . في هذه الحالة لديك لإنشاء طرق خاصة في تطبيق الثعبان وبدء طلبات في جافا سكريبت.

وتذكر، وجافا سكريبت لجانب العميل، بيثون هو للجانب الخادم.

إذا كنت في حاجة الى ارسال القيمة المحددة على الخادم الخاص بك دون سوبميتنغ، وأعتقد أن أفضل (إن لم يكن الوحيد) aproach سيكون لاستخدام بعض اياكس.

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

$(document).ready( 

    $("#select_id").change(function() {
        $(this).getJSON("/method", {"selectValue":$(this).val()}, function() {
                   alert("value received!");
              });
    });

);

ونأمل أن يساعد!

والمشكلة مع استخدام عند_التغيير هو أن ليس كل المستخدمين يستخدمون الفأرة. إذا كان لديك مربع التحرير والسرد وتغيير القيمة مع لوحة المفاتيح، وكنت لن تكون قادرة على تجاوز القيمة الأولى دون شكل المقدمة.

~ Cyrix

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