Флажок в форме ColdFusion

Мой код ниже. Мне нужно, чтобы оба флажка были отмечены по умолчанию при загрузке страницы. Это отображает результат запроса. Теперь, когда один из флажков не отмечен, необходимо отправить форму и отобразить различные результаты запроса. Флажки всегда проверяются, даже когда я снимаю один из них. Может кто-нибудь, пожалуйста, направьте меня сюда?

<form action="abc.cfm?show=yes" method="post" name="myform">
    <table align="center">
    <tr>
        <td>
            <input type="checkbox" checked="checked" name="chkbox" id="chkbox1"> <strong> Agreement Only</strong> 
            &nbsp;&nbsp;<input type="hidden" name="chk" id="chk1">
            <input type="checkbox" checked="checked" name="chkbox" id="chkbox2"> <strong>Active Employees</strong> 
            &nbsp;&nbsp;<input type="hidden" name="chk" id="chk2">
        </td>
        <td>
            <input type="Submit" name="submitnow" value="View now">
        </td>
    </table>
</form>

<cfif isdefined("form.chk1")>
    query 1
<cfelseif isdefined("form.chk2")>
    query 2
</cfif>

person user747291    schedule 02.04.2013    source источник


Ответы (3)


вы назвали флажки одинаковыми и всегда проверяете их, так почему бы им не быть проверенными?

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

Форма не отправлена ​​- NOT structKeyExists(form,'fieldnames')

Форма отправлена ​​и выбран chkbox1 - structKeyExists(form,'chkbox1')

 <td>
   <input type="checkbox"<cfif NOT structKeyExists(form,'fieldnames') OR structKeyExists(form,'chkbox1')> checked="checked"</cfif> name="chkbox1" id="chkbox1"> <strong> Agreement                        Only</strong> 
    &nbsp;&nbsp;<input type="hidden" name="chk" id="chk1">
     <input type="checkbox"<cfif NOT structKeyExists(form,'fieldnames') OR structKeyExists(form,'chkbox2')> checked="checked"</cfif> name="chkbox2" id="chkbox2"> <strong>Active                  Employees</strong> 
   &nbsp;&nbsp;<input type="hidden" name="chk" id="chk2">
  </td>
person Matt Busche    schedule 02.04.2013
comment
Извините, это был тип, флажки chk1 и chk2 - person user747291; 02.04.2013
comment
@ user747291: Пожалуйста, исправьте это в своем вопросе. - person ale; 02.04.2013

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

Некоторые люди могут предположить, что structkeyexists, но я не хотел вводить новую команду, с которой вы, возможно, не знакомы.

<cfparam name="form.chkbox" default="">

<form action="abc.cfm?show=yes" method="post" name="myform">
  <table align="center">
    <tr>
      <td><input type="checkbox" <cfif form.chkbox eq "" or listfind(form.chkbox, 1)>checked="checked"</cfif> name="chkbox" id="chkbox1" value="1">
        <strong> Agreement                        Only</strong> &nbsp;&nbsp;
          <input type="checkbox" <cfif form.chkbox eq "" or listfind(form.chkbox, 2)>checked="checked"</cfif> name="chkbox" id="chkbox1" value="2">
        <strong>Active                  Employees</strong> &nbsp;&nbsp;
</td>
      <td><input type="Submit" name="submitnow" value="View now"></td>
  </table>
</form>
<cfif listfind(form.chkbox, 1) and listfind(form.chkbox,2)>
  query 1
  query 2
</cfif>
person steve    schedule 02.04.2013
comment
спасибо, Стив, мне нужно отобразить результат запроса, когда оба флажка отмечены. Могу ли я использовать это условие для этого? ‹cfif Listfind(form.chkbox, 1) и listfind(form.chkbox, 2)› Запрос 3 ‹/cfif› - person user747291; 02.04.2013
comment
2 флажка все еще остаются отмеченными, даже после того, как я сниму флажок и нажму «Просмотреть сейчас». Любые идеи? - person user747291; 02.04.2013
comment
Я только что проверил все на своей коробке. Скопируйте и вставьте весь выделенный выше код и начните с чистой формы. По умолчанию оба флажка отмечены. Если я нажму «Просмотреть сейчас», они останутся отмеченными, и отобразится запрос 1 и запрос 2. Если я отменю выбор только соглашения и нажму «Просмотреть сейчас», он перезагрузится с выделенными активными сотрудниками. Я могу снять отметку с активных сотрудников и проверить только соглашение, щелкнуть «Просмотреть сейчас», и соглашение останется выделенным. - person steve; 02.04.2013
comment
Для проверки флажок не установлен, это правильно? ‹cfif not listfind(form.chkbox, 2)›? Я до сих пор не могу получить права на результаты. - person user747291; 02.04.2013
comment
‹cfif listfind(form.checkbox,2) eq 0› мой предпочтительный способ сделать это... это может работать и по-другому. - person steve; 02.04.2013
comment
Я все еще не могу получить права на результаты Тогда что-то в вашем коде отличается от того, что опубликовал Стив, потому что он работает так, как рекламируется. Пожалуйста, отредактируйте свой вопрос, включив в него точный код, который вы используете. - person Leigh; 03.04.2013

Проблема в том, что входные данные (chk1 и chk2) ДЕЙСТВИТЕЛЬНО существуют в области формы, когда форма отправляется. Однако их значения пусты.

Чтобы продемонстрировать это, выгрузите область видимости form перед проверкой isdefined.

<cfdump var="#form#" label="form scope">

формировать дамп области

Вам нужно проверять атрибуты value или length входных данных.

<cfif len(form.chk1)>
    query 1
</cfif>

НО!

Это на самом деле не похоже на то, что вы хотите сделать. chk1 и chk2 – это входные данные ТЕКСТ, а не входные данные CHECKBOX.

Если вы хотите действовать на основе флажков, вам нужно проверять value входных данных флажков, что приводит нас к другой проблеме: вы не установили атрибут value для флажков.

<input type="checkbox" value="1"...>

Теперь вам нужно param значения этих флажков, чтобы убедиться, что поля вообще существуют.

<cfparam name="form.chkbox1" value="0">

И затем проверьте значение

<cfif form.chkbox1 EQ 1>
    query 1
</cfif>
person Joe C    schedule 02.04.2013
comment
ваш первоначальный оператор и дамп не совпадают с исходным кодом сообщения. chk1 и chk2 не являются именами скрытых полей. - person Walter Bax; 02.04.2013
comment
Я скопировал и вставил код из его поста, чтобы сделать дамп - с изменением, которое он упомянул как опечатку в другом комментарии. - person Joe C; 02.04.2013
comment
У меня это работает сейчас, за исключением одной вещи, когда я снимаю оба флажка и нажимаю View сейчас, потому что cfparam устанавливается, флажки всегда проверяются. Поможет ли мне какая-либо функция javascript сбросить значение form.chkbox? - person user747291; 10.04.2013
comment
Почему вы устанавливаете значения по умолчанию? Если вы по умолчанию выберете для них 0 и предварительно проверите их только в том случае, если значения равны 1, то они не будут предварительно проверяться при загрузке формы. - person Joe C; 11.04.2013