رایان
3 سال پیش توسط رایان مطرح شد
12 پاسخ

افزودن باکس با جاوا اسکریپت

سلام دوستان وقت بخیر فرض بفرمایید من همچین چیزی دارم:

<form action="#" class="main">
    <div>f</div>
    <div>f</div>
    <div>f</div>
</form>

<a href="#">click</a>

میخوام وقتی روی لینک کلیک میشود دو دایو دیگر در همون فرم اضاف شود البته موفق به انجام این کار با insertAdjacentHTML شدم ولی میخوام محدودش کنم یعنی بیشتر از 2 باکس اضاف نکنه چیکار باید بکنم ؟ ممنون میشم پاسخ بدید


ثبت پرسش جدید
ASPgo
تخصص : HTML، CSS، PHP و JS، طراح قالب...
@asp.gosk 3 سال پیش آپدیت شد
1

باید با createElement و appendChild این کارو انجام بدی. برای محدود کردنش هم باید یه if و یه متغیر قرار بدی
مثلا یه a داریم بهش آیدی btn و میخوایم وقتی روش کلیک شد اون div ها اضافه بشن به form و به خود فرم آیدی form دادیم.
اگه منظورت اینکه با هر کلیک یه div اضافه بشه:

const btn = document.getElementById('btn');
const form = document.getElementById('form');
const div = document.createElement('div');
var createdBoxes = 0;
btn.addEventListener('click', function(e){
    if(createdBoxes < 2){
        form.appendChild(div);
        createdBoxes++;
    }
    e.preventDefault();
});

اگه قرار با یه کلیک دو تا باکس اضافه بشه:

const btn = document.getElementById('btn');
const form = document.getElementById('form');
const div = document.createElement('div');
var clicked = false;
btn.addEventListener('click', function(e){
    if(! clicked){
        form.appendChild(div);
        form.appendChild(div);
        clicked = true;
    }
    e.preventDefault();
});

رو تگ a هم preventDefault اعمال کردیم تا مثل لینک عمل نکنه
آموزش document.createElement
آموزش preventDefault


رایان
تخصص : junior frontend developer
@rex 3 سال پیش مطرح شد
0

داداش این دایو که نوشتم مثال بود ولی شما در نظر داشته باش این دایو ها استایل و محتوای خاصی دارن اونارو چیکار کنم چطوری نمایش بدم ؟

استایل کلی اینطوریه :

<div class="mat-box">
                            <div class="mat-box-top">
                                <a href="#" class="mat-btn" onclick="toggle()"><span>مواد</span></a>
                                <a href="#" class="rounded-red" onclick="del()"><i class="fa fa-multiply"></i></a>
                            </div>
                            <div class="mat-box-body">
                                <input class="mat-equal sum1" type="text" name="sum_1" id="matvalue" placeholder="0">
                                <div class="rounded-green"><i class="fa fa-equals"></i></div>
                                <input class="mat-price price1" onchange="sum()" type="text" name="price_1"
                                    id="matvalue" placeholder="مقدار تومان">
                                <div class="rounded-green"><i class="fa fa-plus"></i></div>
                                <input class="mat-kg kg1" type="text" name="kg_1" id="matvalue" placeholder="KGمقدار">
                                <div class="divide"><span>0%</span></div>
                            </div>
                        </div>

ASPgo
تخصص : HTML، CSS، PHP و JS، طراح قالب...
@asp.gosk 3 سال پیش آپدیت شد
1

در این صورت باید به Div قبل اینکه Append کنی به فرم InnerHTML بدی. و با classList.Add به div class رو اضافه کنی.
کد قبلی رو با این کد جایگزین کن

const btn = document.getElementById('btn');
const form = document.getElementById('form');
const div = document.createElement('div');
div.classList.add('mat-box');
div.innerHTMl = '
                            <div class="mat-box-top">
                                <a href="#" class="mat-btn" onclick="toggle()"><span>مواد</span></a>
                                <a href="#" class="rounded-red" onclick="del()"><i class="fa fa-multiply"></i></a>
                            </div>
                            <div class="mat-box-body">
                                <input class="mat-equal sum1" type="text" name="sum_1" id="matvalue" placeholder="0">
                                <div class="rounded-green"><i class="fa fa-equals"></i></div>
                                <input class="mat-price price1" onchange="sum()" type="text" name="price_1"
                                    id="matvalue" placeholder="مقدار تومان">
                                <div class="rounded-green"><i class="fa fa-plus"></i></div>
                                <input class="mat-kg kg1" type="text" name="kg_1" id="matvalue" placeholder="KGمقدار">
                                <div class="divide"><span>0%</span></div>
                            </div>
                        ';
var clicked = false;
btn.addEventListener('click', function(e){
    if(! clicked){
        form.appendChild(div);
        form.appendChild(div);
        clicked = true;
    }
    e.preventDefault();
});

رایان
تخصص : junior frontend developer
@rex 3 سال پیش مطرح شد
0

inner html ارور داره


ASPgo
تخصص : HTML، CSS، PHP و JS، طراح قالب...
@asp.gosk 3 سال پیش مطرح شد
0

متن ارور و کد js رو بفرست


رایان
تخصص : junior frontend developer
@rex 3 سال پیش مطرح شد
0

سینتکسش ارور میده فکر کنم بخاطر اینکه چند خطی میشه تو inner html


رایان
تخصص : junior frontend developer
@rex 3 سال پیش مطرح شد
0

داداش میتونی ایدی تلگرامتو برام بفرستی ؟


ASPgo
تخصص : HTML، CSS، PHP و JS، طراح قالب...
@asp.gosk 3 سال پیش آپدیت شد
0

لطفا به این ایمیل کد ها رو بفرست:

asp.gosk(at)gmail.com
// (at) رو با @ جایگزین کن

رایان
تخصص : junior frontend developer
@rex 3 سال پیش مطرح شد
0

ایدی گیت هاب بده اد میکنم راحت تره


ASPgo
تخصص : HTML، CSS، PHP و JS، طراح قالب...
@asp.gosk 3 سال پیش مطرح شد
0

آیدی گیت هاب: tsinaa


رایان
تخصص : junior frontend developer
@rex 3 سال پیش مطرح شد
0

تو پروژه اد کردم درخواست ارسال شد به ایمیل


رایان
تخصص : junior frontend developer
@rex 3 سال پیش مطرح شد
0

میشه لطفا سریع برسیش کنی چون وقت زیادی ندارم


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام