Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.12.2021, 10:21
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Проверка внесенной суммы на доступность к покупке
Всем привет друзья.
Пользователь вносит сумму используя для этого ненужные кнопки. Если внесенная сумма меньше цены покупки, запретить выбор продукта. Если внесенной суммы достаточно то разрешить к покупке доступные.

View
<div class="container">
    <div class="text-center">
        <h1 class="display-4">Welcome</h1>
        <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>

        @foreach (var entity in Model.Coins)
        {
            <div class="btn">
                <button class="btn btn-info" value=@Convert.ToInt32(@entity.Cost) disabled=@entity.IsBlocked onclick="myFunction(@Convert.ToInt32(@entity.Cost))">@entity.Cost</button>
            </div>
        }
        <form asp-action="Purchase" asp-controller="User"
              method="post" enctype="multipart/form-data">
            <!--Products-->
            @await Html.PartialAsync("_Products", @Model.ProductViewModels)

            <input type="hidden" id="coin1" name="coin1"/>
            <input type="hidden" id="coin2" name="coin2"/>
            <input type="hidden" id="coin5" name="coin5"/>
            <input type="hidden" id="coin10" name="coin10"/>

            <label>
                Сумма
                <input name="total" type="text" class="total" />
            </label>
            <input class="button" type="submit" value="Оплатить" />
        </form>
        <div id="outputField"></div>
    </div>
</div>


partial View:
<div class="container">
    <div class="row">
        <h3>Продукты</h3>
        @if (Model.Any())
        {
            <div class="formR">
                <table class="table">
                    <thead>
                        <tr>
                            <th>Выбранный</th>
                            <th>Наименование</th>
                            <th>Цена</th>
                            <th>Картинка</th>
                            <th>Описание</th>
                            <th>Наличие</th>
                        </tr>
                    </thead>
                    @foreach (var item in Model)
                    {
                        i++;
                        <tr>
                            <input type="hidden" name="id" value=@item.Id />
                            <td><input asp-for="@item.Name" value="@item.Id" name="Product" type="radio"></td>
                            <br />
                            <td>@item.Name</td>
                            <td>@item.Price</td>
                            <td style="width: 10%">
                                @*//<input type="submit" class="imgb" src="~/images/@item.TitleImagePath" width="100" height="111" />*@
                                @*<p><input type="image" src="~/images/@item.TitleImagePath" alt="ОК"></p>*@
                                @*<img class="img-block" src="~/images/@item.TitleImagePath" width="100" height="111"/>*@
                                <button name="clickonbutton" type="submit" value="@item.Name"><img class="center" srcset="~/images/@item.TitleImagePath" src="@Url.Action("Purchase", "User", new {item.Id })" style="width: 128px; height: 96px;vertical-align: bottom"></button>
                            </td>
                            <td>@item.Description</td>
                            
                        </tr>
                    }
                </table>
            </div>
        }
    </div>
</div>




Можно ли как нибудь сделать так:
Вначале внесенная сумма 0
Все напитки заблокированы.
Пользователь жмет на кнопки на панели чтобы внести сумму, сумма складывается.
Пользователь внес 30, напитки все еще заблокированы.
Если пользователь добавляет 35 становятся доступны напитки по цене 35 и так далее.
Радио бутон нужен для передачи в контроллер, если отмечен передаем. Так и понимаем какой элемент был выбран

Последний раз редактировалось BorisJe, 07.12.2021 в 11:25.
Ответить с цитированием
  #2 (permalink)  
Старый 07.12.2021, 12:11
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от BorisJe
Можно ли как нибудь сделать так:
Вначале внесенная сумма 0
Все напитки заблокированы.
Пользователь жмет на кнопки на панели чтобы внести сумму, сумма складывается.
Пользователь внес 30, напитки все еще заблокированы.
Если пользователь добавляет 35 становятся доступны напитки по цене 35 и так далее.
Да, так сделать можно.
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2021, 12:29
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Сообщение от ksa Посмотреть сообщение
Да, так сделать можно.
Как Я уже перепробовал кучу всего, не могу и все. Не делается так как Я хочу. Или знаний не хватает просто или опыта. Не пойму
Ответить с цитированием
  #4 (permalink)  
Старый 07.12.2021, 13:12
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

BorisJe, когда клацнули на кнопку - ты меняешь сумму.
После этого нужно "пройтись" по радиокнопкам и сделать активными те, что еще не активны и их цена меньше твоей суммы.
Ответить с цитированием
  #5 (permalink)  
Старый 07.12.2021, 13:35
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Сообщение от ksa Посмотреть сообщение
BorisJe, когда клацнули на кнопку - ты меняешь сумму.
После этого нужно "пройтись" по радиокнопкам и сделать активными те, что еще не активны и их цена меньше твоей суммы.
Скорее всего надо блокировать вообще все строчку ну или сумму подсвечивать красным и блокировать радио кнопку.
По клику на кнопку картинку идет переход на контроллер ну а там вся логика.
<button name="clickonbutton" type="submit" value="@item.Name"><img class="center" srcset="~/images/@item.TitleImagePath" src="@Url.Action("Purchase", "User", new {item.Id })" style="width: 128px; height: 96px;vertical-align: bottom"></button>


При клике на нее радиобутон должен становиться истинной.
Но в теории Я понимаю что требуется сделать, как Я вообще понять не могу.
Если можешь подсказать подскажи пожалуйста, Я буду очень признателен и буду знать как делать
Ответить с цитированием
  #6 (permalink)  
Старый 07.12.2021, 13:47
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от BorisJe
По клику на кнопку картинку идет переход на контроллер ну а там вся логика
Кто меняет хтмл?
Его присылает контроллер?
Ответить с цитированием
  #7 (permalink)  
Старый 07.12.2021, 15:55
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Сообщение от ksa Посмотреть сообщение
Кто меняет хтмл?
Его присылает контроллер?
У Меня платформа Asp Net core.
HTML никто не формирует он есть уже его нужно отредактировать в зависимости от внесенных данных на форму пользователем. Данные в хмтл попадают из базы данных. Вся разметка написана.

Каждый напиток имеет свою стоимость.
Если внесенная сумма меньше стоимости напитка, пользователь не может выбирать этот напиток. Нужно держать его заблокированным .
Если внесенная сумма достаточна для оплаты, пользователь выбирает напиток кликая на картинку.

А дальше Я передаю действие контроллеру . Ну и тут уже уменьшая количество напитков -1 , вношу изменения по монетам и выдаю сдачу .

Код:
 [HttpPost]
        public IActionResult Purchase(string total, IFormCollection colletion)
        {       
            idCoins.AddRange(new int[] { coin1, coin2, coin3, coin4 });
            dataManager.UserItem.EditCoinOrder(coinsOrders);

            return Json(new { status = "error", message = "ex.Message" });
        }
Ответить с цитированием
  #8 (permalink)  
Старый 07.12.2021, 16:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от BorisJe
HTML никто не формирует он есть уже его нужно отредактировать
Значит можно использовать тот алгоритм (на JS) что я описал выше...
Ответить с цитированием
  #9 (permalink)  
Старый 07.12.2021, 16:51
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Сообщение от ksa Посмотреть сообщение
Значит можно использовать тот алгоритм (на JS) что я описал выше...
Тогда верно будет так слушать изменения input

$('#total').on('input',function(e){
        alert('Changed!');
    });;


Код:
<label>
                Сумма
                <input name="total" type="text" class="total" />
            </label>
Ответить с цитированием
  #10 (permalink)  
Старый 07.12.2021, 17:11
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

$(document).ready(function () {
        const res = document.querySelector('.result');
        const text = document.querySelector('#total');
        text.addEventListener('input', e => res.innerHTML = e.target.value);
    });


Если вношу изменения вручную все ок, Я могу слушать инпут и вижу изменения. Если Изменения делаю с кнопки то ноль на массу
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск