سؤال

أريد تشغيل حدث الإرسال للنموذج الذي يوجد به العنصر الحالي.الطريقة التي أعرف أنها تعمل في بعض الأحيان هي:

this.form.submit();

أتساءل عما إذا كان هناك حل أفضل، ربما باستخدام jQuery، لأنني لست متأكدًا بنسبة 100٪ من أن الطريقة تعمل في كل متصفح.

يحرر:

الحالة عندي هي كالتالي:

<form method="get">
    <p><label>Field Label
        <select onchange="this.form.submit();">
            <option value="blah">Blah</option>
            ....
        </select></label>
    </p>
</form>

أريد أن أكون قادرًا على تقديم النموذج عند تغيير <select>.

ما أبحث عنه هو الحل الذي يعمل في أي مجال وفي أي شكل دون معرفة المعرف أو الاسم الموجود في النموذج. $('form:first') و $('form') لن يعمل لأن النموذج قد يكون هو الثالث في الصفحة.أيضًا، أنا أستخدم jQuery على الموقع بالفعل، لذا فإن استخدام القليل من jQuery ليس مشكلة كبيرة.

إذن، هل هناك طريقة لجعل jQuery يسترجع النموذج الذي يوجد به الإدخال/التحديد/منطقة النص؟

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

المحلول

وأعتقد أن ما كنت تبحث عن شيء مثل هذا:

$(field).closest("form").submit();

وعلى سبيل المثال، للتعامل مع الحدث onchange، سيكون لديك هذا:

$(select your fields here).change(function() {
    $(this).closest("form").submit();
});

إذا، لسبب لا تستخدم مسج 1.3 أو أعلى، يمكنك الاتصال parents بدلا من closest.

نصائح أخرى

this.form.submit();

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

ويمكنك دائما مسج-إيزي form.submit الخاص بك، ولكن قد مجرد دعوة الشيء نفسه:

$("form").submit(); // probably able to affect multiple forms (good or bad)

// or you can address it by ID
$("#yourFormId").submit();

ويمكنك أيضا إرفاق المهام إلى تقديم الحدث، ولكن هذا هو مفهوم مختلف.

مشابه ل ماثيو الإجابة، لقد وجدت أنه يمكنك القيام بما يلي:

$(this).closest('form').submit();

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

أنا أقف بشكل صحيح:الأبوينس (مع s) يعمل أيضا.شكرا باولو للإشارة إلى ذلك.

ولقد وجدت أن استخدام مسج الحل الأفضل هو

$(this.form).submit()
<ع> استخدام هذا البيان مسج المحمول (مثل مسج شكل المساعد ) يعمل بشكل صحيح ويتم التقليل مسج DOM تعبر النفقات العامة .

وسؤالك في مربكة إلى حد ما في ذلك أنك لا تفسر ما تقصد ب "العنصر الحالي".

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

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

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

<form action="...">
    <input type="hidden" name="rowId" value="...">
    <button type="submit" name="myaction" value="edit">Edit</button>
    <button type="submit" name="myaction" value="delete">Delete</button>
</form>

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

وبعد ذلك على الملقم الذي قرأت للتو قيمة "myaction" متغير وتقرر ما يجب القيام به.

في مسج يمكنك الاتصال

$("form:first").trigger("submit")

لا أعرف إذا كان هذا هو أفضل من ذلك بكثير. أعتقد form.submit ()؛ هو عالمي كبير.

<form method="get">
   <p><label>Field Label
      <select onchange="this.form.submit();">
         <option value="blah">Blah</option>
            ....
     </select>
     </label>
   </p>
    **<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->**
  </form>

<!-- 

   this.form.submit == this.form.elements['submit'];

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