باستخدام يعتمد مع التحقق من صحة مسج البرنامج المساعد

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

سؤال

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

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

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

هنا عينة من قائمة خانات & مربعات النص:

<ul id="ItemList">
<li>
    <label for="OneSelected">One</label><input id="OneSelected" name="OneSelected" type="checkbox" value="true" />
    <input name="OneSelected" type="hidden" value="false" />
    <input disabled="disabled" id="OneValue" name="OneValue" type="text" />
</li>
<li>
    <label for="TwoSelected">Two</label><input id="TwoSelected" name="TwoSelected" type="checkbox" value="true" />
    <input name="TwoSelected" type="hidden" value="false" />
    <input disabled="disabled" id="TwoValue" name="TwoValue" type="text" />
</li>
</ul>

و هنا هو رمز مسج أنا باستخدام

//Wire up the click event on the checkbox
jQuery('#ItemList :checkbox').click(function(event) {
    var textBox = jQuery(this).siblings(':text');
    textBox.valid();
    if (!jQuery(this).attr("checked")) {
        textBox.attr('disabled', 'disabled');
        textBox.val('');
    } else {
        textBox.removeAttr('disabled');
        textBox[0].focus();
    }
});

//Add the rules to each textbox
jQuery('#ItemList :text').each(function(e) {
    jQuery(this).rules('add', {
        required: {
            depends: function(element) {
                return jQuery(element).siblings(':checkbox').attr('checked');
            }
        },
        number: {
            depends: function(element) {
                return jQuery(element).siblings(':checkbox').attr('checked');
            }
        }
    });
});

تجاهل حقل مخفي في كل li إنه هناك لأني باستخدام asp.net MVC Html.Checkbox الأسلوب.

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

المحلول

وعن طريق خيار "تجاهل" ( http://docs.jquery.com/Plugins / التحقق / التحقق من صحة # toptions ) قد يكون أسهل طريقة بالنسبة لك للتعامل مع هذا. يعتمد على ماذا لديك في النموذج. لأي أنك لن تصفية على العناصر المعطلة إذا كان لديك عناصر التحكم الأخرى التي تم تعطيلها لكنك لا تزال هناك حاجة للتحقق من صحة لسبب ما. ومع ذلك، إذا كان هذا الطريق لا يعمل، وذلك باستخدام طبقة إضافية لتصفية على (إضافة وإزالة مع خانات الخاص بك) يجب أن تحصل إلى حيث تريد أن تذهب، ولكن أسهل.

وأي بمعنى.

        $('form').validate({
            ignore: ":disabled",
            ...
        });

نصائح أخرى

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

حقا يتلخص required:'#OneSelected:checked'.وهذا ما يجعل هذا المجال في السؤال المطلوبة إلا إذا كان التعبير صحيحا.في العرض, إذا كنت تقدم الصفحة على الفور, يعمل, ولكن كما كنت خانات الاختيار شكل غير قادر على تقديم حتى فحص الحقول مع بعض المدخلات.بإمكانك وضع .valid() الاتصال في خانة انقر فوق معالج إذا كنت تريد النموذج بأكمله للتحقق من عند النقر.

(كما أنني تقصير الخاص بك خانة الاختيار تبديل قليلا ، مما يجعل استخدام مسج رائع تسلسل الميزة ، على الرغم من "التخزين المؤقت" إلى textBox هو مجرد فعالة.)

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

required : function(){ return $("#register").hasClass("open")}

وبعدCollin ألين الجواب:

والمشكلة هي أنه إذا قمت بإلغاء تحديد خانة اختيار عندما يكون رسالة خطأ مرئيا، رسالة الخطأ لا يذهب بعيدا.

ولقد حلها عن طريق إزالة رسالة خطأ عند تعطيل هذا المجال.

وخذ تجريبي كولين وإجراء التغييرات التالية في عملية تمكين / تعطيل:

jQuery('#ItemList :checkbox').click(function()
{
    var jqTxb = $(this).siblings(':text')
    if ($(this).attr('checked'))
    {       
        jqTxb.removeAttr('disabled').focus();
    }
    else
    {
        jqTxb.attr('disabled', 'disabled').val('');
        var obj = getErrorMsgObj(jqTxb, "");
        jqTxb.closest("form").validate().showErrors(obj);
    }
});
function getErrorMsgObj(jqField, msg)
{
    var obj = {};
    var nameOfField = jqField.attr("name");
    obj[nameOfField] = msg;
    return obj;
}

ويمكنك ان ترى أنا الشجاعة إزالة رسالة الخطأ من الحقل عند تعطيله

وإذا كنت مثيرة للقلق حول $("form").validate()، لا! فإنه لا إعادة تأكيد النموذج هو فقط بإرجاع كائن API من التحقق من صحة مسج.

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

لوعلمي، حتى لو تم تعطيل حقل والقواعد المطبق عليه ما زالت، كذلك، تطبيق. بدلا من ذلك، يمكن أن نحاول دائما هذا ...

// Removes all values from disabled fields upon submit
$(form).submit(function() {
   $(input[type=text][disabled=disabled]).val();
});

وأنا طعاما حاول المساعد مدقق، ولكن الحقيقة أن الرسالة تظهر لsplitsecond يبدو لي وكأنه مأزق مزدوج، كيف تسمون المجلدات الخاصة بك؟ إذا ربط في وظيفة محاولة غير ملزم قبل أن تبدأ، كما يلي:

$('#ItemList :checkbox').unbind("click");
...Rest of code here...

ولا ينبغي التحقق من صحة الحقل بعد تعطيل / تمكين؟

jQuery('#ItemList :checkbox').click(function(event) {
        var textBox = jQuery(this).siblings(':text');

        if (!jQuery(this).attr("checked")) {
                textBox.attr('disabled', 'disabled');
                textBox.val('');
        } else {
                textBox.removeAttr('disabled');
                textBox[0].focus();
        }
        textBox.valid();    
});

وكان لي نفس المشكلة بالضبط.

وأنا تحل هذه من خلال وجود الراديو على زر حدث تغيير دعوة معالج صالحة () على النموذج بأكمله.

وعملت الكمال. الحلول الأخرى المذكورة أعلاه لم تنجح بالنسبة لي.

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