Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Как отметить checkbx по клику на строку таблицы?  (Прочитано 31919 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Okkkks
Помогающий

by
Offline Offline

« : 23-03-2011 08:09 » 

Ребята, подскажите, пожалуйста, как отметить/снять отметку  серверного  checkbxа по клику на строку таблицы?
Есть серверная табличка griedview. В табличке столбец с checkbx-ами (TemplateField).


Код:
<asp:GridView ID="gvCategory" runat="server" CssClass="Control"  onrowcreated="gvCategory_RowCreated">
      
        <Columns>
            <asp:TemplateField HeaderText="">
                <ItemTemplate>
                    <asp:CheckBox ID="cbSelect" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        
        </Columns>
      
    </asp:GridView>

Вот код (как мне казалось должен был работать, но нет =((  ):
Код:
function ClickRow(CurrentRow, RowIndex)
{
            var check = CurrentRow.getElementByID("cbSelect");
            check.Checked = !check.Checked;
}

Пробовала так же писать document.getElementByID(<%=cbSelect.ClientID %>), но ничего не  получается =((
« Последнее редактирование: 23-03-2011 08:15 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 23-03-2011 08:15 » 

какой код формируется?
<label for="id_chekbox">Метка чекбокса</label><input type="chekbox" checked=checked" />
При выводе будет установлена "галка"
Кликая по метке или по полю чекбокса, галка то потухнет, то погаснет то снимется, то установится
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #2 : 23-03-2011 08:21 » 

На странице получается вот так:

Код:
<table class="Control"  id="ctl00_ContentPlaceHolder1_gvCategory" >
<tr onclick="javascript:ClickRow(this, 0);" >
<td>
                    <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$gvCategory$ctl02$cbSelect" />
                       </td>
                </tr>
                    
<tr onclick="javascript:ClickRow(this, 1);">
<td>
                    <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl03_cbSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$gvCategory$ctl03$cbSelect" />
                       </td>
</tr>
</table>

Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 23-03-2011 08:35 » 

tr onclick="javascript:ClickRow(this, ID_нужного_чекбокса);"
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #4 : 23-03-2011 08:36 » 

Спасибо. Сейчас попробую =)

Добавлено через 11 минут и 45 секунд:
Не помогло =((
Теперь на странице вот так:
Код:
<table class="Control"  id="ctl00_ContentPlaceHolder1_gvCategory" >
<tr onclick="javascript:ClickRow(this,cbSelect);" >
<td>
                    <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$gvCategory$ctl02$cbSelect" />
                       </td>
                </tr>
                    
<tr onclick="javascript:ClickRow(this, cbSelect);">
<td>
                    <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl03_cbSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$gvCategory$ctl03$cbSelect" />
                       </td>
</tr>
</table>

но только checkbox всё равно не находится =((
« Последнее редактирование: 23-03-2011 08:47 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 23-03-2011 08:55 » 

Okkkks, читай внимательно...

tr onclick="javascript:ClickRow(this, ID_нужного_чекбокса);"
 а что у тебя?

<tr onclick="javascript:ClickRow(this,cbSelect);" >
         <td>
                    <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect"

и что ты чекаешь? (ха, прикольно чекаты по-украински - ждать)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #6 : 23-03-2011 08:58 » 

но дело в том что я же изначально не знаю что у меня айдишник будет ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect
это же asp уже сам генерит. У меня изначально сказано что айдишник = cbSelect. Ладно если бы у меня было фиксированое число чекбоксов, тогда ещё можно было бы прописать вручную и то если их не много, но у меня их количество зависит от количества строк в таблице.

Добавлено через 2 минуты и 23 секунды:
Вот привязка функции к строке таблицы (при создании строки таблицы на сервере):
Код:
 e.Row.Attributes["onclick"] = string.Format("javascript:ClickRow(this, {0});", e.Row.Cells[0].FindControl("cbSelect").ID);
« Последнее редактирование: 23-03-2011 09:01 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 23-03-2011 09:14 » 

но дело в том что я же изначально не знаю что у меня айдишник будет ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect
это же asp уже сам генерит. У меня изначально сказано что айдишник = cbSelect. Ладно если бы у меня было фиксированое число чекбоксов, тогда ещё можно было бы прописать вручную и то если их не много, но у меня их количество зависит от количества строк в таблице.

Добавлено через 2 минуты и 23 секунды:
Вот привязка функции к строке таблицы (при создании строки таблицы на сервере):
Код:
  e.Row.Attributes["onclick"] = string.Format("javascript:ClickRow(this, {0});", e.Row.Cells[0].FindControl("cbSelect").ID);
Сам генерит... НЕ ВЕРЮ. Значит надо отключить генерацию айди или генерировать айди, а потом генерировать строку с чекбоксом
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #8 : 23-03-2011 09:24 » 

Свойства идентификатора

Серверные веб-элементы управления ASP.NET имеют следующие свойства, действующие как идентификаторы:

    *

      ID –— это идентификатор, который задается в разметке или путем установки свойства ID элемента управления;
    *

      UniqueID –— это идентификатор, который создается ASP.NET для использования кодом, работающим на сервере;
    *

      ClientID –— это идентификатор, который формируется ASP.NET для использования клиентским кодом (он отображается как значение атрибута id в HTML).  


а за идею отключения автогенерации большое спасибо.

назначила свойству ClientIDMode значение static ( теперь ClientID  равен ID = cbSelect), но достать чекбокс все равно не получается =((
« Последнее редактирование: 23-03-2011 09:39 от Okkkks » Записан
Okkkks
Помогающий

by
Offline Offline

« Ответ #9 : 23-03-2011 11:01 » 

ребят, я тут пробую вручную перебирать строчки...

 
Код:
function ClickRow(CurrentRow, RowIndex) {
 
    var table = document.getElementById("gvCategory");

    var listRow = table.getElementsByTagName("tr");
   
    var listColumn = listRow[RowIndex].getElementsByTagName("td");
 
    var el = listColumn[0];

    var check = el.getElementById("cbSelect");

    check.Checked = !check.Checked;
   
       
    }

таблицу находит, колекцию строк и столбцов возвращает, а дальше не идёт...=(( может вы видите где я не так что делаю?..  Краснею
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 23-03-2011 11:06 » 

потому что
НЕ
check = el.getElementById("cbSelect");

а

check = document.getElementById("cbSelect");
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #11 : 23-03-2011 11:20 » 

Sla,  Спасибо =)) чекбокс наконец-то нашёлся =)))
 
« Последнее редактирование: 23-03-2011 11:49 от Okkkks » Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #12 : 23-03-2011 11:44 » 

Okkkks, оно вполне может быть null, поэтому не стоит применять операцию инвертирования..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Okkkks
Помогающий

by
Offline Offline

« Ответ #13 : 23-03-2011 11:50 » 

а разве это не булевское значение(либо true либо false)?  Краснею чувствую себя совсем идиотом  Краснею

а ещё у меня проблема с передачей айдишника в функцию...

передаю так:
Код:
                CheckBox cb = (CheckBox)e.Row.Cells[0].FindControl("cbSelect");
                cb.ID +=  e.Row.RowIndex.ToString();
                e.Row.Attributes["onclick"] = string.Format("javascript:ClickRow({0});",  cb.ID);

принимаю так:

Код:
function ClickRow(ID) {
    alert(ID);
.....................
}

 
даж алерт не сробатывает =((  а если передаю туда номер строки всё работает.... прям чудеса...

Добавлено через 2 минуты и 33 секунды:
тут говорят, что всё таки булевское...

Описание свойства checked

Возвращает текущее значение флажка или переключателя. Вызывается
formName.checkboxName.checked
formName.radioButtonName[index].checked
forms[index].elements[index].checked

Возвращается значение true или false в зависимости от того, установлен или нет флажок.
« Последнее редактирование: 23-03-2011 11:59 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 23-03-2011 12:05 » 

не булевское... (что-то мне подсказывает)
По умолчанию on или off
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #15 : 23-03-2011 12:39 » 

ребят, у меня теперь новая проблема =((

чекбокс нашла, код отрабатывает, alert(check.Checked); возвращает true, а флажок на форме не рисуется =((( скажите скрипт вообще умеет рисовать или мне нужно это моё значение передавать на сервер и там выставлять?  Краснею

вот итоговый код:

Код:
function ClickRow(CurrentRow, ID) {

  
    var check = document.getElementById("cbSelect"+ID);
  
        check.Checked = !check.Checked;
        alert(check.Checked);
        
    }


on/off - говорят, что это значения свойства value для чекбокса, а checked = true/false.
« Последнее редактирование: 23-03-2011 13:42 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 23-03-2011 14:07 » 

Checked != checked
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #17 : 23-03-2011 14:09 » 

не поняла... меняем на противоположное.... я пробовала писать document.getElementById("cbSelect"+ID).Checked=true;  всё равно не рисует =(
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 23-03-2011 14:11 » 

метод checked, но не Checked
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #19 : 23-03-2011 14:15 » 

Sla, Спасибо огромное!!! За терпение и, конечно, за помощь!  =)) наконец-то заработало... Ура!!!! =))

« Последнее редактирование: 23-03-2011 14:28 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 23-03-2011 14:41 » 

та какое тут терпение...
это все шишки Улыбаюсь

ничего... еще все впереди, когда дойдешь до изменения атрибутов стиля элементов
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #21 : 24-03-2011 11:01 » 

Ну я надеюсь, что и в дальнейшем могу рассчитывать на вашу помощь=)) Ещё раз огромное спасибо =)

Ребят, я не знаю, может нужно было новую тему начать... перетащите, если сочтёте нужным... =))
У меня нарисовалась новая проблема =(
Скрипт отрабатывает от и до, но теперь сервер, который проверял и выбирал отмеченные чекбоксы в упор не видит изменений=(( просматривает и у всех  Checked=false(как при создании установлено по умолчанию, будто пользователь ничего и не выбирал)... =((
 
при создании строки таблицы меняю айдишник чекбокса cbSelect на cbSelectX, где Х - номер строки таблицы:

Код:

                CheckBox cb = (CheckBox)e.Row.Cells[0].FindControl("cbSelect");
                cb.ID += e.Row.RowIndex.ToString();

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

Код:

            for (int i = 0; i < gvCategory.Rows.Count; i++)//цикл по таблице
            {

                CheckBox check = (CheckBox)grid.Rows[i].Cells[0].FindControl("cbSelect");//находим чекбоксы
              
                if (check.Checked)//отбираем отмеченые
                {}
            }

но  check.Checked всегда = false.

 если делать
Код:

CheckBox check = (CheckBox)grid.Rows[i].Cells[0].FindControl("cbSelect"+i);//находим чекбоксы

то вообще возвращает нуль. Никак не могу понять почесу скрипт не может договориться с сервером =(( Помогите, пожалуйста....  Краснею
« Последнее редактирование: 24-03-2011 11:21 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 24-03-2011 11:09 » 

Это ты уже на сервере обрабатываешь?

Ты можешь вывести массив POST или GET после сабмита формы
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #23 : 24-03-2011 11:14 » 

Я сейчас ещё проверю.... я тут просто решила убрать скрипт и посмотреть что будет и похоже я где-то ещё нахимичила....


Ситуация такова:
Если убрать
Код:

                CheckBox cb = (CheckBox)e.Row.Cells[0].FindControl("cbSelect");
                cb.ID += e.Row.RowIndex.ToString();
 
тогда нормально работает. Может нельзя так менять айдишники?
« Последнее редактирование: 24-03-2011 11:18 от Okkkks » Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #24 : 24-03-2011 11:18 » 

Okkkks, вроде ж выяснили что "checked" - с маленькой буквы?
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Okkkks
Помогающий

by
Offline Offline

« Ответ #25 : 24-03-2011 11:19 » 

checked с маленькой в скрипте. на сервере с маленькой не знает

Добавлено через 4 минуты и 37 секунд:
Sla,
Это ты уже на сервере обрабатываешь?

Ты можешь вывести массив POST или GET после сабмита формы

в смысле нужно вручную передавать новое состояние чекбоксов? я надеялась что скрипт и сервер имеют равноправный доступ к свойствам контрола... эээхх...
« Последнее редактирование: 24-03-2011 11:23 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 24-03-2011 12:13 » 

как в ручную?
запрос с формы поступает  в массив GET или POST
соответсвенно ты должна обработать ВХОДНЫЕ данные
Сервер уже не знает о состоянии контролов
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #27 : 24-03-2011 12:39 » 

Sla,  нужно использовать Request... я правильно понимаю? А где там искать мои чекбоксы? в Params?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #28 : 24-03-2011 12:49 » 

ну... наверное в REQUEST
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #29 : 24-03-2011 12:50 » 

=)) спасибо. буду искать =)
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 25-03-2011 10:46 » 

Судя по коду, серверная часть пишется на C# - вероятно ASP.NET. В этом случае не надо ничего вручную анализировать в RequestString. Нужно правильно запрограммировать действия и, в первую очередь, инициализацию дочерних контролов на форме.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 25-03-2011 10:54 » 

Dimka, я не знаю C# - ASP.NET

тогда подскажи, и мне, как это правильно
запрограммировать действия

или объясни, кто будет анализировать REQUEST?

и...
произошла автоматическая генерация id контрола (элемента), мне нужно с помощью js скрипта добраться до этого элемента по id, откуда я узнаю его id в коде C#

ps мне это не нужно... так на всякий случай, и описал существующую ситуацию у ТС
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #32 : 25-03-2011 11:15 » 

Это немного не так работает. ASP контрол создаётся на сервере и для него генерится HTML код. Все универсальные ClientID тоже создаются там, и через них сервер узнаёт контрол, отправивший сообщение (обрабатывает REQUEST). После этого он вызывает зарегистрированный обработчик для данного сообщения в C# коде. По окончании работы обработчика, сервер обновляет HTML код с учётом изменённых в обработчике данных, в котором, например, чекбокс = true. Если честно, то я тоже не понимаю, зачем при работе с ASP.NET мутить что-то с JS? GridView великолепно отправляет сообщения о своих Item-ах, а в C# работать ИМХО гораздо удобней.

Добавлено через 18 минут и 37 секунд:
Вот так, к примеру выглядит код для грида с кнопкой в каждой строке для удаления текущей позиции:

Код: (ASP)
                       
            <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center"
                    ItemStyle-BorderWidth="1px" HeaderStyle-BorderWidth="1px" FooterStyle-BorderWidth="0px">
                <ItemTemplate>
                      <asp:ImageButton ImageUrl="Images/cart_remove_btn.png" runat="server" ID="_remove"
                                                CommandName="Remove" CommandArgument='<%# Eval("Id") %>' />
                 </ItemTemplate>
             </asp:TemplateField>


А вот обработчик:

Код: (C#)
        protected void _gridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
                if (e.CommandName == "Remove")
                {
                        MyViewModel.Remove(e.CommandArgument.ToString());
                }
        }

И всё. Не надо с JS отыскивать кнопку, и тд и тп.
« Последнее редактирование: 25-03-2011 12:07 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #33 : 25-03-2011 12:00 » 

Разве что следует отметить, что из-за вложенности контролов и их автоматического повтора следует различать содержимое поля ID (это для сервера) и ClientID (это для JS). Второе поле хранит более сложный автоматически генерируемый идентификатор, уникальный в пределах HTML.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #34 : 25-03-2011 12:07 » 

Да, конечно. Это как раз те самые "сложные" Id уже упомянутые Okkkks, например  "ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect".
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #35 : 25-03-2011 13:17 » 

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

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #36 : 25-03-2011 13:30 » 

Слав, я думаю тут немного другая философия подхода. Зачем тебе нужно знать этот ClientId? Это часть контрола, который, да, будет представлен сервером в виде HTML кода (а как же иначе?). Но тебе зачем в него вникать? Всё, что нужно ты можешь сделать на сервере. А поменяв что-то не то у клиент, ты рискуешь прервать связь с объектом на сервере.
« Последнее редактирование: 25-03-2011 13:31 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #37 : 25-03-2011 14:18 » 

Мы говорим об web интерфейсе
Например,
мне нужно повесить обработчик js на событие onchange
при этом, если true (напрмиер, маскируемый ввод), то изменить состояние control  type=hidden на type=text

Как?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #38 : 25-03-2011 14:32 » 

Слав, давай уточним, на onchage ASP.NET контролла? Я вот про что говорю. Ведь у него такое событие обрабатывается на сервере, в C# коде.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #39 : 25-03-2011 14:47 » 

Web > Клиентские скрипты

Это тема

Следовательно, когда браузер получил html контент, то он уже ничего не знает о сервере (если не принимать особых усилий)

<input type=chekbox id=check1 onchange=func(text1)>
<input type=hidden id=text1>
<scriot>
function func(id){
getElementById(text1).type="text";
}
</script>

Вот, например, такое решение хотела видеть ТС

Как ты предлагаешь сделать такое?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #40 : 25-03-2011 15:38 » 

Ну... дык. То что вопрос задан в этой теме, ещё не показатель того, что поиск решения идёт в верном направлении. Может у человека просто не хватает опыта с ASP.NET, а JS она знает хорошо, вот и пытается применить имеющиеся знания. Поэтому я предлагаю делать это на стороне сервера и не мешать все существующие способы манипулирования контента. Личное моё мнение ессно.

зы Опять же ИМХО, я не исключаю ситуации, когда такое может и придётся делать, запускать клиенсткий скрипт с серверными элементами. Но тогда усилия должны себя оправдывать. Скажем так, безвыходная ситуация, время поджимает и тп. Тогда можно попробовать пофантазировать без 100% гарантии на успех, о том как формируются ClientID, пока логика просматривается довольно чётко:

ctl00 -> ContentPlaceHolder1 -> gvCategory -> ctl02 -> cbSelect

Ну как-то так. Но в данном случае можно легко обойтись без этого.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #41 : 25-03-2011 17:50 » 

Цитата: Sla
изменить состояние control  type=hidden на type=text
Я не проверял, но на 90% уверен, что ASP.NET этого не переживёт, если страница описана статически. Хотя там тоже можно исхитриться, поскольку есть иерархия контролов.

Цитата: Sla
а каким образом они попадают в клиентский код, при условии что мне нужно именно уникальный, заранее известный, т.е. ClientId
Я делаю серверными вставками Улыбаюсь В aspx/ascx файле прописать скрипт с нужной обёрточной функцией
Код: (HTML)
<SCRIPT type="text/javascript">
  function foo()
  {
    var element = document.getElementById("<%= this.myControl.ClientID %>");
    // ...
  }
</SCRIPT>
При генерации HTML вставка заменится на магический идентификатор.

Но на самом деле у контролов есть свойства вроде OnClientClick.
« Последнее редактирование: 25-03-2011 17:56 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #42 : 25-03-2011 19:49 » 

Цитата: Sla
изменить состояние control  type=hidden на type=text
Я не проверял, но на 90% уверен, что ASP.NET этого не переживёт, если страница описана статически. Хотя там тоже можно исхитриться, поскольку есть иерархия контролов.
А причем здесь ASP.NET?
Может мы говорим о разных вещах?

Есть web-сервер - отдает html контент
есть приложение - принимает html контент (браузер) Обрабатывает его своим внутренним языком, пусть это будет js)
И отдает запрос в виде REQUEST серверу. Кто не переживет?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #43 : 26-03-2011 07:41 » 

Sla, по-моему, говорить о сервере вообще - это то же самое, что говорить о сферическом коне в вакууме.

Мы же не протокол HTTP обсуждаем и т.п., мы обсуждаем то, как создать приложение. А приложение работает в рамках той или иной технологии, которая инкапсулирует HTTP, REQUEST и отчасти JS в браузере (по крайней мере предоставляет свой framework) и т.д. Например, ASP.NET так делает. Почему заговорили про ASP.NET - потому что приведённый выше код серверной стороны написан на C#.

Говорить про RequestString - всё равно, что говорить о WinAPI. Да, оно есть, но львиная доля приложений строится на базе надстроек над WinAPI, а не на голом WinAPI.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Okkkks
Помогающий

by
Offline Offline

« Ответ #44 : 29-03-2011 09:44 » 

Ребята, задача изначально была такая:
Нужно выделять/снимать выделение чекбокса,который находится в таблице, кликая не по самому чекбоксу, а по строке в таблице. Как это сделать на стороне сервера да так чтоб это не пидалило на каждом шагу я не придумала. Да и мне всегда казалось, что для этого и придумали скрипт =)) (знаю его кстати весьма поверхностно =(((  )  вот поэтому собственно скрипт...
Если вы знаете как эта задача решается на сервере расскажите мне пжалста =))

на данный момент:
 автогенерация айдишника отключена (ID=ClientID=cbSelect), но при создании строк таблицы я модифицирую айдишники добавляя к ним № строки, для того, чтоб легче было искать потом в html  (ClientID=cbSelect№).
скрипт отрабатывает как надо, всё выделяется/снимается выделение, но теперь я похоже "потеряла связь сервера с контролом". Сервер не видит отмеченые чекбоксы =(( и как тут выкрутится не знаю.... =(( ничё не получается =((
« Последнее редактирование: 29-03-2011 12:10 от Okkkks » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #45 : 29-03-2011 13:16 » 

Цитата: Okkkks
Как это сделать на стороне сервера да так чтоб это не пидалило на каждом шагу я не придумала.
Никак. Чтобы это происходило на сервере, нужно именно послать на сервер форму.

Уменьшить объём передаваемых данных можно через AJAX. Но в общем и целом эта задача решается клиентским скриптом.

Цитата: Okkkks
автогенерация айдишника отключена (ID=ClientID=cbSelect), но при создании строк таблицы я модифицирую айдишники добавляя к ним № строки, для того, чтоб легче было искать потом в html  (ClientID=cbSelect№).
скрипт отрабатывает как надо, всё выделяется/снимается выделение, но теперь я похоже "потеряла связь сервера с контролом". Сервер не видит отмеченые чекбоксы =(( и как тут выкрутится не знаю.... =(( ничё не получается =((
Потому что нельзя "отключать" автогенерацию ID. Напиши скрипт, который использует реальные автоматически сгенерированные ID (пример серверной вставки я давал).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Okkkks
Помогающий

by
Offline Offline

« Ответ #46 : 29-03-2011 13:51 » 

Dimka,  спасибо =) есть пара мыслей =))
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines