تعيين السمة القيمة الفعلية للمساهمة مع مسج

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

  •  06-07-2019
  •  | 
  •  

سؤال

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

$(this).attr('value', $(this).val());

وكذلك ....

$(this).val($(this).val());

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

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

المحلول

وعندما كنت تفعل شيئا من هذا القبيل:

$(this).val($(this).val());

وأنه يترجم فعلا على النحو التالي:

var temp = $(this).val());
$(this).val(temp);

وحتى في الجوهر، لمجرد وضع نفس القيمة مرة أخرى.

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

نصائح أخرى

وهذا يبدو وكأنه خدعة باردة، وهنا واحد آخر.

ويمكنك تعديل DOM عن طريق استبدال العنصر كله، وذلك بدلا من:

$('#my_input').val("new_value_here");

ويمكنك استخدامها:

$('#my_input').replaceWith(' < input type="text" value="new_value_here" />');

ولقد توصل إلى حل لهذا ...

عند توفير نموذج (عبر AJAX، على الاستدعاء النجاح):

// Set 'savedValue' attr on elements (for when reset, will reset to last saved values)
$('#myForm input').each(function() {
    $(this).attr('savedValue', $(this).val());
});

عند الحاجة إلى إعادة النموذج:

// Reset form
if($('#myForm input:first').attr('savedValue')!=undefined) {
    // Have saved values, reset to last saved values
    $('#myForm input').each(function() {
        $(this).val($(this).attr('savedValue'));
    });
}
else {
    // No saved values, reset form
    $('#myForm')[0].reset();    
}

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

ومجرد استخدام thing.value="foo"; تحقق ما اذا كان يعمل عند شيء هو كائن مسج وكذلك مجرد كائن DOM منتظم. وذلك باستخدام attr('value', $(this).val()) لا تعمل كيف تريد أن

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

عند توفير:

$(this).data("ResetValue", $(this).val());

في إعادة تعيين:

$(this).val($(this).data("ResetValue"));

وتغيير محددات بشكل مناسب، وربما إضافة الاختيار غير معروف كما ذكر ريان.

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