سؤال

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

هل preventDefault() هل لديك وظيفة معاكسة؟

إليك بعض نماذج الشفرة:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>preventDefault</title>
    <style type="text/css"></style>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript">
            $(function() {
                var wordNum = 3;
                var input_length;
                $("#max").text("max word(s): " + wordNum);
                $("#test").keypress(function(event) {

                    input_length = $.trim($(this).val())
                            .replace(/\s+/g, " ")
                            .split(' ').length;

                    if (input_length > (wordNum - 1)) {
                        event.preventDefault();
                    } else {
                        return true;
                    }
                });
            });

        </script>
        </head>
        <body>
            <div id="max"></div>
            <textarea id="test" cols="20" rows="5"></textarea>
</body>
</html>

يبدو أنه يعمل على IE، لكن فايرفوكس لا يحب ذلك.

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

المحلول

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

السبب في أنه يعمل في IE هو لأن IE لا يطلق النار على حدث KeyPress للحذف والنهاية والإدخال والهروب من مفاتيح الوظائف والمنزل أو إدراج أو صفحة / أسفل وعلامة التبويب. في Safari، يكون keycode للحذف غير صحيح في حدث KeyPress.

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

ثانيا، انظر إلى Keycode وإذا كان حذف أو مسافة للخلف، فلا تتجاوزه.

if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) {
    return false;
} else {
    return true;
}

نصائح أخرى

لا ينبغي ذلك

if maxwords
   preventDefault
else
   return true

قم بالخدعة ؟

ببساطة استخدام return true; في نهاية EventHandler الخاص بك. من شأنه أن فقومة الحدث إلى المتصفح.

لا تبدو وكأنها، https://developer.mozilla.org/en/dom/vent. ، ولكن يمكنك فقط عدم الاتصال به...

$("#delete_button").click(function(e){
            var category = $("#category").val();
            var answer = confirm("Are you sure you would like to delete the " + category + " category?");
            if (!answer)
                e.preventDefault();
        });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top