0

好的,这是我的问题,以及我所有的“脏”代码。这不是我的生产代码,只是试图让它在此刻工作。

基本上我需要的是,当用户选择 Not Ok 单选按钮时,它会显示该唯一集的 textarea,当我选择 Not Ok 时,它现在不执行此操作,它会为所有条目提供 textarea,现在大约 13 集目前从 mysql 数据库动态生成的问题。我有一种感觉,它必须用唯一的 id 做一些事情,这些 id 要么现在在我的代码中的错误位置,要么根本不存在。非常感谢任何帮助。

<div data-role="collapsible" data-theme="b" data-content-theme="c">
<h3>Vehicle Check Information</h3>
<?php
$query = mysql_query("SELECT * FROM vehicle_q");
while($row = mysql_fetch_array($query)) {
    $q_title = $row['title'];
    $q_id = $row['id'];
?>

<div data-role="fieldcontain" style="border:0;">
<fieldset data-role="controlgroup">
<legend><?php echo $q_title; ?>:</legend>

<input type="radio" name="help[]" id="checkbox-1a" value="Ok" />
<label for="checkbox-1a">Ok</label>
<input type="radio" name="help[]" id="checkbox-2a" value="Not Ok" />
<label for="checkbox-2a">Not Ok</label>

</fieldset>

<div id="hidden_text-<?php echo $q_id; ?>" style="display:none;">

<script>
$(document).ready(function(){
$(":radio:eq(1)").click(function(){
$("#hidden_text-<?php echo $q_id; ?>").show(500);
});
$(":radio:eq(0)").click(function(){
$("#hidden_text-<?php echo $q_id; ?>").hide(500);
});
});
</script>

<fieldset data-role="fieldcontain">
<label for="<?php echo $q_title; ?>_t">Explain the Deficiency(If any):</label>
<textarea name="text_a[]" id="<?php echo $q_title; ?>_t"></textarea>
</fieldset>
</div>
</div>
<input type="hidden" name="q_title1[]" value="<?php echo $q_title; ?>" />

<?php
}
?>

</div>
4

3 回答 3

0

我发现根据单选值显示隐藏元素的最简单方法是根据onchange元素的 id(您已经拥有)提供事件。在您的情况下,由于您只有两个基于相同名称的收音机,因此最简单的方法是使用简单的 if/else 语句。就像是:

<script type="text/javascript">
$(function(){
    $('#checkbox-1a').change(function(){
        if($(this).attr('checked')){
            $('#hidden-text-<?php echo $q_id;?>').hide(500);
        }else{
            $('#hidden-text-<?php echo $q_id;?>').show(500);
        }
    });
});
</script>

我们声明何时#checkbox-1a更改:如果元素被选中(选择),那么做一些事情(在你的情况下隐藏一些东西),否则做其他事情(在你的情况下显示一些东西)。

于 2012-11-24T04:04:45.517 回答
0

其他 2 个答案是解决问题的方法。作为一个方面,这可能是它发生的原因。当您使用 -

$(":radio:eq(1)").click(function()
$(":radio:eq(0)").click(function()

您正在使用单击侦听器,它仅检查是否在您的页面上单击了具有该索引位置的“任何”单选按钮。因此,任何具有索引位置的按钮1都会$(":radio:eq(1)").click(function()执行每次操作。

编辑 -

您可能想要更改您的单选按钮ids,因为 (1) 当您在每个循环中重复它们时,它们不会是唯一的while(),并且 (2) 您可以使用它来检查是否单击了该特定单选按钮。

尝试将其更改为 -

...
<input type="radio" name="help[]" id="checkbox-1a-<?php echo $q_id; ?>" value="Ok" />
<label for="checkbox-1a">Ok</label>
<input type="radio" name="help[]" id="checkbox-2a-<?php echo $q_id; ?>" value="Not Ok" />
<label for="checkbox-2a">Not Ok</label>

</fieldset>

<div id="hidden_text-<?php echo $q_id; ?>" style="display:none;">

<script>
$(document).ready(function(){
$("#checkbox-2a-<?php echo $q_id; ?>").click(function(){
$("#hidden_text-<?php echo $q_id; ?>").show(500);
});
$("#checkbox-1a-<?php echo $q_id; ?>").click(function(){
$("#hidden_text-<?php echo $q_id; ?>").hide(500);
});
});
</script>
于 2012-11-24T04:19:23.127 回答
0

尝试类似:

<div data-role="collapsible" data-theme="b" data-content-theme="c">
    <h3>Vehicle Check Information</h3>
    <?php
    $query = mysql_query("SELECT id,title FROM vehicle_q");
    while($row = mysql_fetch_array($query)) {
        $q_title = $row['title'];
        $q_id = $row['id'];
    ?>
    <div data-role="fieldcontain" style="border:0;" class="groupings">
        <fieldset data-role="controlgroup">
            <legend><?=$q_title?>:</legend>
            <input type="radio" name="help[]" id="checkbox-<?=$q_id?>-1a" value="Ok" />
            <label for="checkbox-<?=$q_id?>-1a">Ok</label>
            <input type="radio" name="help[]" id="checkbox-<?=$q_id?>-2a" value="Not Ok" />
            <label for="checkbox-<?=$q_id?>-2a">Not Ok</label>
        </fieldset>
        <div id="hidden_text-<?=$q_id?>" class="hiddenText" style="display:none;">
            <fieldset data-role="fieldcontain">
                <label for="<?=$q_title?>_t">Explain the Deficiency(If any):</label>
                <textarea name="text_<?=$q_id?>_a[]" id="<?=$q_title?>_t"></textarea>
            </fieldset>
        </div>
    </div>
    <input type="hidden" name="q_title1[]" value="<?php echo $q_title; ?>" />
    <?php
    }
    ?>
</div>
<script>
    $(document).ready(function(){
        $(".groupings input:radio").click(function(){
            if (this.value == "Ok") {
                $(this).parent().next('.hiddenText').show(500);
            } else {
                $(this).parent().next('.hiddenText').hide(500);
            }
        });
    });
</script>

这是未经测试的,但脚本只需要声明一次,它将应用于与单选按钮相关的其余部分。

于 2012-11-24T04:07:37.903 回答