Атрибуты. Добавить событие Onclick в коде c # позади - PullRequest
6 голосов
/ 30 ноября 2009

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

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

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

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

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

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

Ответы [ 6 ]

7 голосов
/ 30 ноября 2009

Прежде всего, убедитесь, что после того, как страница была сгенерирована, идентификатор все еще "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

1 голос
/ 30 ноября 2009

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

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

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

Michel

1 голос
/ 30 ноября 2009

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

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

и да, он будет работать на загрузке.

0 голосов
/ 31 августа 2012

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

txtbxHowMany.Attributes.Add("onclick", "document.getElementById('ctl00_ContentPlaceHolder1_tbxProdAC').innerText='';")
0 голосов
/ 30 ноября 2009

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

txtbxHowMany.Attributes.Add("onclick", string.Format("document.getElementById('{0}').innerText='';", tbxProdAC.ClientID));
0 голосов
/ 30 ноября 2009

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

    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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...