0

我使用 JQuery,我有一个网页,其中列出了多行,每行带有单选按钮和文本框。当我连续单击单选按钮时,我正在尝试启用文本框。我所期待的是 - 它应该只在该行中启用/禁用文本框。它不应该启用/禁用其他行中的文本框。

默认情况下,每行中的所有文本框在页面加载时都被禁用。我进行了研究,并且能够获得一个解决方案来启用一个文本框,当我单击一个单选按钮时。现在,当我选择另一个单选按钮时,我希望之前启用的文本框应该再次被禁用,并且当前行中的文本框现在应该被启用。这就是我想要达到的目标。

我做了很多研究,大多数答案都不符合要求。请帮助。我使用 JQuery,我也尝试使用 Jquery 和 javascripts 获得解决方案。

这是代码:

<div class="content">   
    <form name="selectedMatIds" action="@{addMaterialsToBuffer()}" method="POST">
    <div class="separator" style="margin-top:30px"><h4>Materials found</h4></div>
    <table class="table MaterialTable" id="makeZebras">
        <thead>
        <tr>
                <th class="alignLeft first">
                    Code
                </th>
                <th class="alignLeft">
                    Measure
                </th>
                <th class="alignLeft">
                    Unit
                </th>
                <th class="alignLeft">
                    New Unit
                </th>
            </tr>
        </thead>
        <tbody>
            #{list items:foundList, as:'mat' }
            <tr>
                <td>
                    <input type="radio" name="selectedMatIds" id="selectedMatIds" value="${mat.id}" onclick="getMaterialID()"> ${mat.materialCode} 
                </td>
                <td>
                    ${mat.bum}
                </td>
                <td>
                    ${mat.iumPerBum}
                </td>
                <td>
                <div id="group">
                    <input type="text" id="newIUM" name="${mat.id}" value="${newIUM}" disabled>
                    <input type="hidden" id="oldIUM" name="oldIUM" value="${mat.iumPerBum}">
                    <input type="hidden" id="bum" name="bum" value="${mat.bum}">
                    <a id="save" onclick="loadURL1()">Save</a> <a>Cancel</a>                        
                </div>
                </td>
            </tr>
            #{/list}
        </tbody>
        <div class="actions">
            <input type="submit" class="primary" value="Continue">
        </div>
    </table>

现在,Jquery 脚本:

$("input:radio[name='selectedMatIds']").click(function() {
    var isDisabled = $(this).is(":checked");
    var value = $(this).val();
    var textValue = $("#newIUM").val();
    alert(isDisabled);
    alert(value);
    alert(textValue);
    if(isDisabled) $("#newIUM").removeAttr("disabled");
    else $("#newIUM").attr("disabled", isDisabled);
});
4

2 回答 2

2

采用.closest()

$("input:radio[name='selectedMatIds']").click(function() {
      var value = $(this).val();
      var $closest = $(this).closest('tr'); // Find closest tr 
      // Find the value of the textbox in current row
      var textValue = $closest.find('input[type="text"]').val(); 
        //  Disable All Text Boxes
      $('.MaterialTable input[type="text"]').prop('disabled' , true);  


      // Only enable the textbox of the particular row
      $closest.find('input[type="text"]').prop('disabled' , false);
});
于 2012-11-08T01:30:49.450 回答
0

谢谢你的帮助!当用户单击单选按钮然后将此值从隐藏文本字段传递给控制器​​时,我通过将文本框内容写入隐藏文本字段来解决此问题。

于 2012-11-14T22:12:26.900 回答