yasin83 Ответов: 1

Как отключить кнопку после перенаправления ответа


Привет. Я делаю обновление страницы с перенаправлением ответа. Кнопка имеет код перенаправления ответа. Я хочу деактивировать свою кнопку после переадресации. Ответный редирект на страницу, потому что я никогда не делал переключатель не пассивным.

Что я уже пробовал:

Я попробовал response.write и jquery

Response.Redirect("~/flows/Edit?id=" + flowId);

В jQuery;
$(function () {
  $("#sms").click(function () {
    var $foo = $(this);
    if(!$foo.data('clicked'))
    {
      alert("SMS sent successfully!");
    }
    else {
      alert("You've already sent this sms.");
    }
    $foo.data('clicked', true);
  });

a href;
<a class="btn btn-default" id="sms">Sent SMS</a>

Kornfeld Eliyahu Peter

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

[no name]

Я использую перенаправление ответа на странице обновления. таким образом, страница обновляется сама по себе после обновления. У меня есть кнопка "Отправить sms о встрече" на моей странице обновления. Я хочу дать предупреждение "sms отправлено", когда они нажмут эту кнопку один раз. Если вы нажмете эту кнопку во 2-й раз "уже sms брошено", я хочу дать предупреждение.

Kornfeld Eliyahu Peter

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

[no name]

Как добавить картинку в комментарий?

Kornfeld Eliyahu Peter

Ты не можешь...
Скопируйте код как код - и отформатируйте его...

[no name]

Хорошо.

это мой код перенаправления (в контроллере);

Ответ.Перенаправление("~/flows/Edit?id=" + flowId);


В jQuery;

$(функция () {

$("#sms").click(функция () {
var $foo = $(это);
if(!$foo.data('clicked'))
{
оповещение("SMS отправлено успешно!");
}
еще {
предупреждение("вы уже отправили это sms.");
}
$фу.данных('нажали', правда);
});

a href;

отправить SMS


Я хочу настроить страницу обновления. Страница становится редиректом и обновляется после отправки sms естественным образом. После обновления страницы, если пользователь отправил 1 sms, Я хочу, чтобы он прекратил отправку страницы, если она не закрыта

1 Ответов

Рейтинг:
0

Afzaal Ahmad Zeeshan

Вы не следуете дальше, страница, однажды перенаправленная, не будет содержать предыдущего состояния, если только вы не сохраните ее с помощью кода на стороне сервера или кода на стороне клиента.

if(!$foo.data('clicked'))
Для этого требуется, чтобы элемент содержал свойство данных или чтобы вы прикрепили свойство данных во время выполнения. В противном случае он будет ложным (ваше условие истинно), он всегда будет пытаться отправить SMS. Тогда вы делаете это,
$foo.data('clicked', true);
Вы пытаетесь убедиться, что кнопка теперь имеет свойство data clicked, и она имеет значение true. Но именно здесь возникает ваша проблема. После этого ваша страница обновляется, а DOM перезагружает HTML-контент, и в этом контенте нет свойства data для гиперссылки (вашей кнопки).

Вы можете решить ее двумя способами. Во-первых, вы используете серверный код и визуализируете свойство data по требованию, например,
ViewBag.BtnClicked = true;
Response.Redirect("~/your-url");
Затем на стороне клиента визуализируйте элемент управления следующим образом,
<a class="btn btn-default" @if(ViewBag.BtnClicked != null) { <text>data-clicked="true"</text> } id="sms">Sent SMS</a>
Это приведет к отображению гиперссылки со свойством, которое вы хотели бы присвоить. Второй способ-это использование библиотек и инструментов JavaScript, одним из таких является localStorage[^] ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС. Используя это, вы можете хранить состояние значений в браузере, а не хранить их на сервере. В этом вы можете сделать,
$(function () {
    $("#sms").click(function () {
        var btnClicked = localStorage.get($(this)); // Passing the object as key
        // So that we can utilize same function for multiple elements.
        if(!btnClicked)
        {
            alert("SMS sent successfully!");
            localStorage.set($(this), true); // Set that this button has been clicked.
        }
        else {
            alert("You've already sent this sms.");
        }
        // No need to run the code if it has been set already.
    });
});
Это будет немного сложно, если у вас есть несколько кнопок на странице, и вы хотите контролировать, какие из кнопок были нажаты, а какие отключены/включены. То же самое верно и для серверной части.

Подробнее о компании читайте здесь .data()[^] функция в jQuery.
Проверьте примеры localStorage на MDN: окно.localStorage - веб-API | MDN[^].

Редактировать
Кроме того, я забыл написать, что вы всегда можете рассмотреть возможность использования Ajax и отправки фонового запроса, который не обновит страницу. Таким образом, ваше SMS будет отправлено, ваше свойство данных будет добавлено, и ваш код тоже будет работать. Вы можете прочитать следующую ссылку, чтобы узнать больше об отправке Ajax-запросов с помощью jQuery.

на jQuery."Аякс" () | библиотека jQuery API документация[^]


[no name]

действительно большое вам спасибо за ваш комментарий но предложенные вами ответы не сработали :(

Afzaal Ahmad Zeeshan

В чем была проблема, что вы столкнулись?

[no name]

отправка sms напрямую, даже не оповещение:)

Afzaal Ahmad Zeeshan

Это происходит потому, что вы не препятствуете выполнению действия по умолчанию. Воспользуйся event.preventDefault(); при прочих равных условиях.

[no name]

где я могу использовать этот код в приведенном вами примере? Я немного плохо отношусь к MVC.

Afzaal Ahmad Zeeshan

При условии else блока if...else в JavaScript. :-)