Не отключать кнопку до перезагрузки текущей страницы (с использованием Jquery) - PullRequest
2 голосов
/ 14 июля 2020

У меня есть строка поиска в index.php, и когда я набираю идентификатор, данные SQL берутся из fetch.php. Файл fetch. php содержит кнопку «AddToZip» для каждой строки данных SQL. Когда я нажимаю на выбранную кнопку, выбранная кнопка отключается (до этого момента все идет правильно). Но когда я очищаю панель поиска, чтобы ввести другой идентификатор или, возможно, тот же идентификатор, все отключенные кнопки «AddToZip» повторно активируются / включаются. Как мне отключить их, когда пользователь использует панель поиска несколько раз, и они в любом случае активируются только тогда, когда пользователь обновляет страницу.

index. php

<php code>

<?php
session_start();
...
...
...
?>

<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>LiveData</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
 </head>
 <body>
  <div class="container">
   <br />
   <h2 align="center">Live Data Search</h2><br />
   <div class="form-group">
    <div class="input-group">
     <span class="input-group-addon">Search</span>
     <input type="text" name="search_text" id="search_text" placeholder="Search by ID" class="form-control" />
    </div>
    
   </div>
   <p>
        <a href="logout.php" class="btn btn-danger">Sign Out of Your Account</a>
        
    </p>
    
   <br />
   <div id="result"></div>
  </div>
</html>



<script>
$(document).ready(function(){
    $('#search_text').keyup(function(){
        var txt = $(this).val();
        if(txt != '')
        {
            $.ajax({
                url:"fetch.php",
                method: "post",
                data: {search:txt},
                dataType: "text",
                success: function(data)
                {
                    $('#result').html(data);
                }
            });
        }
        else
            if(txt == '')
        {
            $.ajax({
                url:"null.php",
                method: "post",
                data: {search:txt},
                dataType: "text",
                success: function(data)
                {
                    $('#result').html(data);
                }
            });
        }
        
            
    });
});

</script>

<script>

    var addToZip = function(id, btn) {
        $.ajax({
        
        url:"AddToZip.php?id=" + id,
        success: function(data) {
            btn.disabled = true;
        }
    });
};
</script>

fetch. php

<?php
...

if(mysqli_num_rows($result) > 0)
{
 $output .= '<h4 align = "center">Search Result</h4>';
 $output .= '<div class="table-responsive">
                <table class = "table table bordered">
                   <tr>
                        <th>ID</th>                                 
                    </tr>';
                    
    while($row = mysqli_fetch_array($result))
    {
                
        $output .= '
                <tr>
                    <td>'.$row["ID"].'</td>
                    <td><button type="button" class="btn btn-primary" onclick="addToZip(\''.$row["ID"].'\', this)"><i class="fa fa-pdf" aria-hidden="true"> </i>Add to Zip</button></td>
                </tr>
            ';
    }
    echo $output;
    
}
...

?>

Ответы [ 2 ]

0 голосов
/ 16 июля 2020

Можете ли вы добавить код AddToZip. php?

Вы можете сохранить все идентификаторы в значение сеанса и проверить, содержится ли идентификатор внутри этого массива на вашем fetch. php.

AddToZip. php:

session_start();
if (!isset($_SESSION['added_to_zip_ids']))
    $_SESSION['added_to_zip_ids'] = [];
if (array_search($_GET['id'], $_SESSION['added_to_zip_ids']) === false)
    $_SESSION['added_to_zip_ids'][] = $_GET['id'];

fetch. php:

<?php
...

session_start();
if (!isset($_SESSION['added_to_zip_ids']))
    $_SESSION['added_to_zip_ids'] = [];

if(mysqli_num_rows($result) > 0)
{
 $output .= '<h4 align = "center">Search Result</h4>';
 $output .= '<div class="table-responsive">
                <table class = "table table bordered">
                   <tr>
                        <th>ID</th>                                 
                    </tr>';
                    
    while($row = mysqli_fetch_array($result))
    {
                
        $output .= '
                <tr>
                    <td>'.$row["ID"].'</td>
                    <td><button '.(array_search($row["ID"], $_SESSION['added_to_zip_ids']) === false ? '' : 'disabled').' type="button" class="btn btn-primary" onclick="addToZip(\''.$row["ID"].'\', this)"><i class="fa fa-pdf" aria-hidden="true"> </i>Add to Zip</button></td>
                </tr>
            ';
    }
    echo $output;
    
}
...

?>

А чтобы очистить сохраненные значения, у вас есть два решения:

  1. Сохранить другие данные сеанса

    session_start (); if (isset ($ _ SESSION ['added_to_zip_ids'])) unset ($ _ SESSION ['added_to_zip_ids']);

  2. Очистить все

    session_start (); session_unset ();

Эта строка может быть где угодно на сервере.

0 голосов
/ 14 июля 2020

Я бы рекомендовал использовать обработчик событий 'keyup' (как вы уже делаете) и / или обработчик 'change' для активации функции (например, check_disable_status)

$('#search_text').keyup(check_disable_status)
$('#search_text').change(check_disable_status)

, и вы должны запустить это функция также в состоянии «готово» DOM.

В этой функции вы просто проверяете текущее «СОСТОЯНИЕ» вашего поля или, возможно, другие зависимости для вашего бизнеса logi c и устанавливаете поле всегда в ВКЛЮЧЕНО или состояние ОТКЛЮЧЕНО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...