使用jQuery发出表单输入的检查值

时间:2011-04-27 14:01:08

标签: php jquery forms

我想根据myform中隐藏输入的值执行if语句。

场景是我有一个由测试组成的表。每个测试基本上都是它自己的形式。如果测试附加了密码,隐藏输入基本上包含'YES'。我想提示用户输入密码,如果他们尝试执行特定测试时提交密码(提交表单)。

所以这是我正在尝试的代码:

$("#submit").live('click', function(event) {
    if ($(this).parent().find(':input:hidden[name=has_password]').val() == 'YES') {
            $('.messagepop').remove();
                $(this).parent().append('<div class="messagepop pop"><p><label for="password">Enter test password</label><input type="text" size="30" name="pass" id="pass" /></p><p><input type="button" id="submitPass" value="GO" id="pass_submit"/> or <a class="close" href="/">Cancel</a></p></div>');
                $(".pop").slideFadeToggle(function() { 
                $("#pass").focus();
                });
                return false;
    }  
});

没有if语句代码可以工作:在单击表单中的特定按钮时,会弹出另一个小密码输入表单。但是,如果隐藏输入的值为“YES”,我只希望弹出表单。

我已检查隐藏输入中是否存在值。

我想我正在使用jQuery略有错误,因为我是初学者。那么有人可以找出更好的方法来执行检查吗?

非常感谢,

编辑(jsfiddle with html等):

jsfiddle

3 个答案:

答案 0 :(得分:2)

您的HTML格式错误。 <tr><form>结束标记不匹配,您在<form>内直接有一个<tr>标记,这是不允许的,您还没有自我关闭您的<input />代码,并且您在同一页面上有重复的ID。

<tr>
  <form name='myform' method='post' action='test_sim.php'>
    <input name='test' type='hidden' value='1'>
    <input type='hidden' name='has_password' value='NO'>
    <td>TEST 1</td>
    <td>B352</td>
    <td>10</td>
    <td>2011-05-12 06:00:00</td>
    <td>2011-05-12 12:00:00</td>
    <td>06:00:00</td>
    <td><input id='submit' type='button' value='execute test'></td>
  </tr>
</form>

应该是这样的:

<tr>
  <td>TEST 1</td>
  <td>B352</td>
  <td>10</td>
  <td>2011-05-12 06:00:00</td>
  <td>2011-05-12 12:00:00</td>
  <td>06:00:00</td>
  <td>
    <form name='myform' method='post' action='test_sim.php'>
      <input name='test' type='hidden' value='1' />
      <input type='hidden' name='has_password' value='NO' />
      <input class='submit' type='button' value='execute test' />
    </form>
  </td>
</tr>

修复HTML可以解决您的问题:http://jsfiddle.net/brianpeiris/ezFgU/16/

您应该使用W3C Validator tool检查HTML,以便防止出现这类问题。

编辑:正如mcgrailm所提到的,您的id属性是重复的。看来,jQuery在这里是宽容的,这就是上面的jsFiddle工作的原因。您应该使用类来标识提交按钮,并使用相应的$('.submit')选择器来附加单击处理程序。

答案 1 :(得分:1)

我相信

if ($(this).parent().find(':input:hidden[name=has_password]').val() == 'YES')

应该是

 if ($(this).parent().find('input[name=has_password]:hidden').val() == 'YES')

答案 2 :(得分:1)

我认为你的选择器不正确试试这个

$("#submit").live('click', function(event) {
    if ($(this).parent().find('input[name="has_password"]:hidden').val() == 'YES') {
            $('.messagepop').remove();
                $(this).parent().append('<div class="messagepop pop"><p><label for="password">Enter test password</label><input type="text" size="30" name="pass" id="pass" /></p><p><input type="button" id="submitPass" value="GO" id="pass_submit"/> or <a class="close" href="/">Cancel</a></p></div>');
                $(".pop").slideFadeToggle(function() { 
                $("#pass").focus();
                });
                return false;
    }  
});

WORKING DEMO