Атрибуты. Добавить событие Onclick в код С#

117
14

У меня есть два текстовых поля tbxProdAc и txtbxHowMany. Я хотел бы написать немного кода в коде, потому что, когда я ввожу текст в один, любой текст, который мог быть в другом, удаляется.


Как можно добиться этого и в каком случае я должен его разместить?


Я попытался использовать



txtbxHowMany.Attributes.Add("onclick", "document.getElementById('tbxProdAC').innerText='';");


в событии загрузки страницы, но без успеха... должно быть в pre_init?


Как вы можете сказать, полный новичок на работе здесь.

спросил(а) 2021-01-25T14:20:16+03:00 4 месяца, 2 недели назад
1
Решение
126

Прежде всего, убедитесь, что, когда страница была сгенерирована, идентификатор все еще является "tbxProdAC", если это элемент управления .Net, идентификатор был бы изменен. В этом случае вы можете использовать класс.


Попробуйте следующее: - Это использует JQuery - вам нужно будет указать, что


txtbxHowMany.Attributes.Add("onclick", "$('#tbxProdAC').val('');"); 

Добавьте в главный раздел своей страницы следующее.

 <script type="text/javascript" src="jquery.js"></script> 

И вы можете получить файл JQuery.Js отсюда: http://docs.jquery.com/Downloading_jQuery#Download_jQuery


И почему: https://stackoverflow.com/questions/308751/why-use-jquery

ответил(а) 2021-01-25T14:20:16+03:00 4 месяца, 2 недели назад
63

ASP.NET Изменяет идентификатор сгенерированных элементов управления, поэтому, вероятно, ваш tbxProdAc изменит свой идентификатор на другое. Вам нужно запустить приложение один раз, просмотреть источник и узнать идентификатор вашего элемента управления, а затем заменить "tbxProdAc" на новый идентификатор в вашем


txtbxHowMany.Attributes.Add("onclick", "document.getElementById('tbxProdAC').innerText='';"); 

и да, это будет работать onLoad.

ответил(а) 2021-01-25T14:20:16+03:00 4 месяца, 2 недели назад
63

Основная проблема заключается в том, что когда ваш элемент управления находится внутри другого элемента управления (например, сетки), asp.net префикс идентификатора вашего элемента управления, чтобы сохранить идентификатор элемента управления уникальным, например, идентификатор не будет txbProdAc, но он будет Gridview1_txbProdAc или даже это:
Panel1_Panel2_gridview1_txProdAc.


если вы хотите узнать в коде, за которым id asp.net будет "давать" или "переименовывать" ваш элемент управления, вы можете использовать свойство .ClientID:
txtProdAc.ClientID предоставит вам идентификатор, который вы должны использовать из javascript/jquery.

если вы когда-либо разместили свой txbProdAc в другом элементе управления, он все равно будет работать, потому что функция .ClientID всегда дает вам правильный идентификатор для элемента управления в клиенте script.


Мишель

ответил(а) 2021-01-25T14:20:16+03:00 4 месяца, 2 недели назад
45

Добавив немного к тому, что ответил TheOne, когда мы посмотрим на источник веб-страницы, он покажет отображаемый контент. где идентификатор будет отличаться. что-то вроде этого.


txtbxHowMany.Attributes.Add("onclick", "document.getElementById('ctl00_ContentPlaceHolder1_tbxProdAC').innerText='';")

ответил(а) 2021-01-25T14:20:16+03:00 4 месяца, 2 недели назад
45

Чтобы расширить ответ на , вы добавите событие, но должно быть настроено иначе, поскольку ASP.NET изменяет идентификатор, который отправляется клиенту:


txtbxHowMany.Attributes.Add("onclick", string.Format("document.getElementById('{0}').innerText='';", tbxProdAC.ClientID));

ответил(а) 2021-01-25T14:20:16+03:00 4 месяца, 2 недели назад
-4

Если вы используете представление дизайна, вы можете просто дважды щелкнуть мышью по своим текстовым полям и создать для вас эти методы:


    private void tbxProdAc_TextChanged(object sender, EventArgs e)
{

}

private void txtbxHowMany_TextChanged(object sender, EventArgs e)
{

}


вам просто нужно отредактировать их следующим образом:


     private void tbxProdAc_TextChanged(object sender, EventArgs e)
{
txtbxHowMany.Clear();
}

private void txtbxHowMany_TextChanged(object sender, EventArgs e)
{
tbxProdAc.Clear();
}

ответил(а) 2021-01-25T14:20:16+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема