نمایش نتایج 1 تا 10 از 10

نام تاپیک: جلوگیری از اجرای یک متد در حین سرچ در ajax

  1. #1

    جلوگیری از اجرای یک متد در حین سرچ در ajax

    سلام دوستان

    من یه متد سرچ نوشتم و با ajax در یک تکست باکس ازش استفاده میکنم که هر کلمه ای که سرچ میشه پیشنهادهایی رو نشون بده.و زمانیکه صفحه لود میشه تمام ایتمها رو به من نشون بده.کد زیر رو نوشتم اما زمانیکه سرچ میکنم و میخام از یک طرف در گ کنم به سمت دیگه.دوبار کلمه رو درگ میکنه.چطور میتونم مانع از اجرای loadproduct در زمانیکه که autosearch اتفاق میفته بشم؟

    @section scripts{
    <script type="text/javascript" language="javascript">
    $(document).ready(function () {
    loadProducts();
    function loadProducts() {
    var str = "";
    getData(str);
    }
    $('#autoSearch').on("input", function () {
    var str = $('#autoSearch').val();
    // if ($.trim(str).length) {
    getData(str);
    // }
    });
    function getData(str) {


  2. #2
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    ابتدا یه متغیر برای نگهداری وضعیت لود داده ها تعریف کنید:
    $(document).ready(function () {var isLoad = false; // نگهداری وضعیت ارتباط با سرور
    loadProducts();
    .
    .
    .
    }


    در بدنه تابع loadProducts باید چک کنید که وضعیت در چه حالتی هست:
    function loadProducts() {    if(isLoad === true)
    return;


    var str = "";
    getData(str);
    }

    در تابع getData باید قبل از ارسال درخواست ایجکس مقدار isLoad رو true و بعد از اتمام عملیات (در متد always یا complete) مقدار اون رو true کنید.

  3. #3

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    من الان که دقیقتر بررسی کردم حتی اگر تابع loadproduct رو کامنت کنم مشکلم هنوز پابرجاست.در واقع تا زمانیکه در inputbox کلمه ای سرچ بشه و نتایجی نشون بده.و من یکی از نتایج رو درگ کنم مشکلی نیس.مشکل زمانی پیش میاد که در input مقادیر رو پاک میکنم که در این حالت کل اطلاعات دیتابیس رو به من نشون میده و درست هست فقط طمانیکه میخام یه عنصر رو درگ کنم دوبار پشت هم درگ میشه.ممنون میشم بگید مشکل از کجاست؟

    @{
    ViewBag.Title = "SelectStuff";
    Layout = "~/Views/Shared/_AdminLayout.cshtml";
    }
    <style type="text/css">
    table, td {
    background-color: azure;
    border: double;
    }
    #dvright, #dvleft {
    background-color: azure;
    height: 200px;
    width: 300px;
    }
    </style>
    <table>
    <tr>
    <td>
    <h1>Product List</h1>
    </td>
    <td>
    <h1>Selected Products</h1>
    </td>
    </tr>
    <tr>
    <td>
    <input id="autoSearch" list="lstproducts" placeholder="جستجو..." />
    <div id="dvleft">
    <ul id="lstproducts"></ul>
    </div>
    </td>
    <td>
    <div id="dvright">
    <ul id="lstselectedproducts"></ul>
    </div>
    </td>
    </tr>
    </table>


    @section scripts{
    <script type="text/javascript" language="javascript">
    $(document).ready(function () {
    // loadProducts();
    // function loadProducts() {

    // var str = "";
    // getData(str);
    // }
    $('#autoSearch').on("input", function () {

    var str = $('#autoSearch').val();
    // if ($.trim(str).length) {
    getData(str);
    // }
    });
    function getData(str) {
    var items = "";
    $.ajax({
    url: "/Admin/GetData",
    data: { "str": str },
    type: "GET",
    }).done(function (resp) {
    $.each(resp, function (idx, val) {
    items += "<li draggable='true'>" + val.Name + val.Id + "</li>";
    });
    $("#lstproducts").html(items);
    setEvents();
    }).error(function (err) {
    alert("Error! " + err.status);
    });
    function setEvents() {
    var lstProducts = $('li');
    //Set Drag on Each 'li' in the list
    $.each(lstProducts, function (idx, val) {
    $('li').on('dragstart', function (evt) {
    evt.originalEvent.dataTransfer.setData("Text", evt.target.textContent);
    evt.target.draggable = false;
    });
    });
    //Set the Drop on the <div>
    $("#dvright").on('drop', function (evt) {
    evt.preventDefault();
    var data = evt.originalEvent.dataTransfer.getData("Text");
    var lst = $("#lstselectedproducts");
    var li = "<li>" + data + "</li>" + "<input type='text'/>";
    li.textContent = data;
    lst.append(li);
    });
    //The dragover
    $("#dvright").on('dragover', function (evt) {
    evt.preventDefault();
    });
    }
    }
    });
    </script>
    }


    اینم از متد getdata:
      public ActionResult  GetData(string str)
    {
    var query1 = (from p in db.Stuffs
    orderby p.Id ascending
    where p.Name.Contains(str)
    select p).Take(10);
    var query2 = (from p in db.Stuffs
    orderby p.Id ascending
    select p);
    if (str == "")
    {
    return Json(query2.ToList(), JsonRequestBehavior.AllowGet);
    }
    else
    {
    return Json(query1.ToList(), JsonRequestBehavior.AllowGet);
    }
    }

  4. #4

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    اینم عکس از تصویر اشکال برنامه من:
    Untitled.jpg

  5. #5
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    کدهای شما به ازای هر آیتم دوبار ایونت رو ثبت میکنه من مرتبشون کردم:

    $(document).ready(function () {
    // loadProducts();
    // function loadProducts() {


    // var str = "";
    // getData(str);
    // }
    $('#autoSearch').on("input", function () {
    var str = $('#autoSearch').val();
    // if ($.trim(str).length) {
    getData(str);
    // }
    });


    function getData(str) {
    var items = "";
    $.ajax({
    url: "/Admin/GetData",
    data: { "str": str },
    type: "GET",
    }).done(function (resp) {
    $.each(resp, function (idx, val) {
    items += "<li draggable='true' class='dragable'>" + val.Name + val.Id + "</li>";
    });
    $("#lstproducts").html(items);
    setEvents();
    }).error(function (err) {
    alert("Error! " + err.status);
    });
    }


    $(document).on("dragstart", "li.dragable", function (evt) {
    evt.originalEvent.dataTransfer.setData("Text", evt.target.textContent);
    evt.target.draggable = false;
    });


    $(document).on("drop", "li.dragable", function (evt) {
    evt.preventDefault();
    var data = evt.originalEvent.dataTransfer.getData("Text");
    var lst = $("#lstselectedproducts");
    var li = "<li>" + data + "</li>" + "<input type='text'/>";
    //li.textContent = data;
    lst.append(li);
    });


    $("#dvright").on('dragover', function (evt) {
    evt.preventDefault();
    });


    });

  6. #6

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    بسیار ممنون که کدها رو بررسی کردین.
    اما من کد شما رو که کپی میکنم برنامه اصلن کار نمیکنه.

  7. #7

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    در واقع اشکال برنامه اینجاست که هربر سرچ میکنم ودوباره پاک کنم و همه لیست ظاهر بشن این مقادیر میمونن
    یعنی اگر یکبار سرچ کنم و بعد پاک کنم ومجدد سرچ کنم دوبار کلمات ذخیره میشن و بعدم درگ میشن.واگر یکبار دیگه این سرچ رو تکرار کنم هر درگ من 4تا میشه.

  8. #8
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    کد زیر رو جایگزین کنید. در این کد بجای درگ کردن با کلیک آیتم باید به لیست مقابل اضافه بشه:

    $(document).ready(function () {
    $('#autoSearch').on("input", function () {
    var str = $('#autoSearch').val();
    getData(str);
    });


    var $lstproducts = $("#lstproducts");
    var $lst = $("#lstselectedproducts");


    function getData(str) {
    var items = "";
    $.ajax({
    url: "/Admin/GetData",
    data: { "str": str },
    type: "GET",
    }).done(function (resp) {
    $lstproducts.empty();
    $.each(resp, function (idx, val) {
    var $li = $('<li>' + val.Name + val.Id + '</li>');
    $li.on('click', function (event) {
    event.preventDefault();
    var text = $li.val();
    var node = $('<li>' + text + '<input type="text" /></li>');
    $lst.append(node);
    });


    $lstproducts.append($li);
    });
    }).error(function (err) {
    alert("Error! " + err.status);
    });
    }


    });

  9. #9

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    ممنون از پاسختون
    اما بازم این کد مشکل چندبار نویسی در سرچ رو داره و همینکه در لیست selected مقادیر مثه مرغ و غیره رو نمینویسه.

  10. #10

    نقل قول: جلوگیری از اجرای یک متد در حین سرچ در ajax

    من کدها رو تغببر دادم و الان برنامه درست شده یعنی هم سرچ میکنه هم اینکه درگ کردن رو بدرستی انجام میده.اما الان یه مشکل دارم اونم اینه که چطور تو این کد میتونم input رو هم اضافه کنم که در Selectedproduct اینپوت باکس هم نوشته بشه.

    <style type="text/css">
    table, td {
    background-color: azure;
    border: double;
    }
    #dvright, #dvleft {
    background-color: azure;
    height: 600px;
    width: 300px;
    }
    #draggable {
    width: 400px;
    height: 20px;
    text-align: center;
    background: white;
    }
    .dropzone {
    width: 600px;
    height: 200px;
    background: blueviolet;
    margin-bottom: 10px;
    padding: 10px;
    }
    </style>

    <table>
    <tr>
    <td>
    <h1>Product List</h1>
    </td>
    <td>
    <h1>Selected Products</h1>
    </td>
    </tr>
    <tr>
    <td>
    <input id="autoSearch" list="lstproducts" placeholder="جستجو..." />
    <div id="dvleft">
    <div class="dropzone">


    <ul id="lstproducts"></ul>

    </div>
    </div>

    </td>
    <td>
    <div class="dropzone"></div>
    @using (Html.BeginForm("AddStuffFood", "Admin", FormMethod.Post, new { enctype = "multipart/form-data", id = "myUploadForm" }))
    {
    <div id="dvright" >
    <ul id="lstselectedproducts"></ul>
    </div>
    <section id="content">
    <div class="container">

    <div class="col-lg-12">
    <div class="row">
    <div class="editor-field marginbot20 ">
    @Html.TextBoxFor(model => model.Food.Title, new { placeholder = "نام غذا", @class = "form-control input-lg" })
    @Html.ValidationMessageFor(model => model.Food.Title)
    </div>
    <div class="editor-field marginbot20">
    @Html.TextBoxFor(model => model.Food.Type, new { placeholder = "نوع غذا", @class = "form-control input-lg" })
    @Html.ValidationMessageFor(model => model.Food.Type)
    </div>
    <div class="editor-field marginbot20">
    @Html.TextAreaFor(model => model.Food.FullText, new { placeholder = "دستور پخت", @class = "form-control input-lg" })
    @Html.ValidationMessageFor(model => model.Food.FullText)
    </div>
    <div class="editor-field marginbot20 ">
    @Html.TextBoxFor(model => model.Food.TimetoCook, new { placeholder = "مدت زمان پخت", @class = "form-control input-lg" })
    @Html.ValidationMessageFor(model => model.Food.TimetoCook)
    </div>
    <div class="editor-field marginbot20 ">
    @Html.TextBoxFor(model => model.Food.TimetoPrepare, new { placeholder = "مدت زمان آماده سازی ", @class = "form-control input-lg" })
    @Html.ValidationMessageFor(model => model.Food.TimetoPrepare)
    </div>
    <div class="editor-field marginbot20 ">
    @Html.TextBoxFor(model => model.Food.ForMember, new { placeholder = " تعداد نفرات", @class = "form-control input-lg" })
    @Html.ValidationMessageFor(model => model.Food.ForMember)
    </div>
    <div class="editor-field marginbot20 ">
    @Html.TextBoxFor(model => model.Food.LevelFood, new { placeholder = "سطح مهارت", @class = "form-control input-lg" })
    @Html.ValidationMessageFor(model => model.Food.LevelFood)
    </div>
    <div class="margintop20">
    @Html.Upload("UploadImage")
    @Html.ValidationMessageFor(model => model.Food.Image)
    </div>
    </div>

    </div>
    </div>

    </section> <button class="btn btn-theme btn-block btn-lg">افزودن</button>
    }
    </td>
    </tr>
    </table>


     
    $('#autoSearch').on("input", function () {

    var str = $('#autoSearch').val();

    getData(str);

    });
    function getData(str) {
    var items = "";
    $.ajax({
    url: "/Admin/GetData",
    data: { "str": str },
    type: "GET",
    }).done(function (resp) {
    $.each(resp, function (idx, val) {
    // items += " <li >" + val.Name + val.Id + "</li>";
    items += "<li id='draggable' draggable='true' ondragstart='event.dataTransfer.setData('text/plain',null)'>" + val.Name + val.Id + "</li>"+ "<input type='text'draggable='true' ondragstart='event.dataTransfer.setData('text/plain',null)'/>";
    });
    $("#lstproducts").html(items);

    }).error(function (err) {
    alert("Error! " + err.status);
    });

    }

    var dragged ;
    /* events fired on the draggable target */
    document.addEventListener("drag", function (event) {
    }, false);
    document.addEventListener("dragstart", function (event) {
    // store a ref. on the dragged elem
    dragged = event.target;
    //alert(event.target);
    // make it half transparent
    event.target.style.opacity = .5;
    }, false);
    document.addEventListener("dragend", function (event) {
    // reset the transparency
    event.target.style.opacity = "";
    }, false);
    /* events fired on the drop targets */
    document.addEventListener("dragover", function (event) {
    // prevent default to allow drop
    event.preventDefault();
    }, false);
    document.addEventListener("dragenter", function (event) {
    // highlight potential drop target when the draggable element enters it
    if (event.target.className == "dropzone") {
    event.target.style.background = "purple";
    }
    }, false);
    document.addEventListener("dragleave", function (event) {
    // reset background of potential drop target when the draggable element leaves it
    if (event.target.className == "dropzone") {
    event.target.style.background = "";
    }
    }, false);
    document.addEventListener("drop", function (event) {
    // prevent default action (open as link for some elements)
    event.preventDefault();
    // move dragged elem to the selected drop target
    if (event.target.className == "dropzone") {
    event.target.style.background = "";
    dragged.parentNode.removeChild(dragged);
    event.target.appendChild(dragged);
    }
    }, false);


تاپیک های مشابه

  1. جلوگیری از اجرای مکرر متد getView در ListActivity
    نوشته شده توسط saeidd در بخش Android Studio
    پاسخ: 2
    آخرین پست: جمعه 05 دی 1393, 20:21 عصر
  2. آموزش: جلوگیری از اجرای php و.. در زیر پوشه های یک پوشه
    نوشته شده توسط generalhak در بخش PHP
    پاسخ: 5
    آخرین پست: سه شنبه 15 مرداد 1392, 23:42 عصر
  3. جلوگیری از اجرای یک اندیس در حلقه
    نوشته شده توسط saed2006 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: شنبه 25 اردیبهشت 1389, 13:49 عصر
  4. چگونگی جلوگیری از اجرای مجدد برنامه در هنگام بازبودن آن
    نوشته شده توسط پریسا نامدار در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: دوشنبه 15 فروردین 1384, 23:02 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •