【问题标题】:Can we set the value of a control from variable我们可以从变量中设置控件的值吗
【发布时间】:2012-06-10 04:31:19
【问题描述】:

是否可以设置控件ID保存在变量中的控件的值。代码看起来像

var textmonth = $(this).parent().find('input[id$=txtmonths]').attr("id");

我正在尝试做这样的事情

textmonth.val("Only numbers");

真的可以吗?

演示代码如下:

html代码为:

<div id="pagecontent">
<h1>
        Collection Master</h1>

    <table cellpadding="1" cellspacing="2" style="padding-left:40px; font-size:medium; padding-right:20px"
        width="100%" border="0">
        <tr>
                <td colspan="2" style="width: 100%">
                    <asp:GridView ID="grdFees" runat="server" AllowPaging="false" CssClass="Grid" AutoGenerateColumns="false"><Columns>

                            <asp:TemplateField HeaderText="SI NO" HeaderStyle-HorizontalAlign="center"
                                ItemStyle-HorizontalAlign="center" ItemStyle-Width="3%">
                                <ItemTemplate>
                                    <%# Container.DataItemIndex + 1%>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField HeaderText="Sub Category" DataField="SUB_CAT" ItemStyle-CssClass="subcat" ItemStyle-Width="15%"
                                HeaderStyle-HorizontalAlign="center" ItemStyle-HorizontalAlign="center" />
                            <asp:BoundField HeaderText="Fees Paid (Months,Quarters)" DataField="PAID_FEES" ItemStyle-Width="15%"
                                HeaderStyle-HorizontalAlign="center" ItemStyle-HorizontalAlign="center" />
                                <asp:BoundField HeaderText="Pending Fees" DataField="PEND_FEES" ItemStyle-Width="5%"
                                HeaderStyle-HorizontalAlign="center" ItemStyle-HorizontalAlign="center" />
                            <asp:TemplateField HeaderText="Current Payment" HeaderStyle-HorizontalAlign="center" ItemStyle-HorizontalAlign="center"
                                ItemStyle-Width="10%">
                                <ItemTemplate>
                                    <asp:TextBox ID="txtmonths" Width="80%" runat="server" 
                                     CssClass="Textbox"></asp:TextBox>
                                    <a href="#" class="openModalLink">
                                        <img style="vertical-align: middle; border: none" width="9%" alt="" 
                                        src="../Images/ico_map.gif"  id="imgmap" class="zoom"/></a>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </td>
            </tr>
</table>
    <div id="overlay" class="web_dialog_overlay">
        </div>
        <div id="dialog" class="web_dialog">
            <table style="width: 100%; border: 0px;" cellpadding="3" cellspacing="0">
                <tr>
                    <td class="web_dialog_title" style="height: 16px">
                        Month Chooser</td>
                        <td class="web_dialog_title align_right" style="height: 16px">
                        <a href="#" id="btnClose">Close</a>
                    </td>
                </tr>
                <tr>
                <td colspan="2">
                <asp:GridView ID="grdpopup" runat="server" TabIndex="5">
                        <Columns>
                        <asp:TemplateField HeaderText="Select" HeaderStyle-HorizontalAlign="center"
                                ItemStyle-HorizontalAlign="center" ItemStyle-Width="2%">
                                <ItemTemplate>
                                    <asp:CheckBox ID="chkselect" runat="server" CssClass="checkbox" 
                                    Width="15px" Checked="false" />
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField HeaderText="Term" DataField="TERM" ItemStyle-Width="35%" HeaderStyle-HorizontalAlign="center" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="term" />
                            <asp:BoundField HeaderText="Fee Amt." DataField="FEE_AMT" ItemStyle-Width="35%" HeaderStyle-HorizontalAlign="center" ItemStyle-HorizontalAlign="center" ItemStyle-CssClass="feeamt" />

                        </Columns>
                    </asp:GridView>
                </td></tr>
                <tr>
                    <td rowspan="2" colspan="2" style="text-align: center; vertical-align:middle">
                        <input id="btnSubmit1" type="button" value="Submit" class="button" />
                    </td>
                </tr>
                </table>
                </div>

</div>

JS代码是

<script src="../Jquery Autocomplete/jquery-1.7.2.min.js" type="text/javascript"> 
</script>
<script src="../Jquery Autocomplete/jquery.json-2.2.min.js" type="text/javascript"> 
</script>
    <script type="text/javascript">
$(document).ready(function() 
    {
        var textmonth;
        var textamount;

        $(".openModalLink").click(function()
        {
            textmonth = $(this).parent().find('input[id$=txtmonths]').attr("id");
            textamount = $(this).parent().parent().find('input[id$=txtAmount]').attr("id");
            ShowDialog();
        });
        $("#btnClose").click(function(e) 
        {
            textmonth = null;
            textamount = null;
            HideDialog();
        });
        $('#btnSubmit1').click(function(e) 
        {
            var month = null;
            var amount = 0;
            $(':checkbox:checked').each(function(i) 
            {

                var amt=$(this).closest("tr").find(".feeamt").text();
                if(amt != '')
                {
                    amount = amount + parseInt(amt,10);
                    if(month == null)
                    {
                        month = $(this).closest("tr").find(".term").text();
                    }
                    else
                    {
                        month = month + ',' + $(this).closest("tr").find(".term").text();
                    }
                }
            });
            $("#"+textamount).val(amount);
            $("#"+textmonth).val(month);
            HideDialog();
        });
    });
    function ShowDialog(modal)
    {
        $("#overlay").show();
        $("#dialog").fadeIn(300);
        if (modal) {
            $("#overlay").unbind("click");
        }
    }
    function HideDialog() 
    {
        $("#overlay").hide();
        $("#dialog").fadeOut(300);

    }
    </script>

【问题讨论】:

  • 您真的要设置控件吗?或者你的意思是说你想添加一个验证约束? (两者都非常可能,只是语法不同)

标签: jquery jquery-selectors controls


【解决方案1】:

这样使用

var textmonth = $(this).parent().find('input[id$=txtmonths]')
 remove .attr("id")

那么你可以使用

textmonth.val("only numbers")

【讨论】:

    【解决方案2】:
    $(this).parent().find('input[id$=' + txtmonths +']').val('foo');
    

    其中txtmonths 是所需id 的结尾。

    Live DEMO

    【讨论】:

    • 这将更新网格中的所有文本框,但我只想更新特定行中的文本框。很抱歉没有在问题中解释整个过程
    • @Prince。我相信有比接受的答案更好的方法来做你想做的事。你能在jsfiddle.net给我一个DEMO吗?
    • @Prince。试试这个:$(this).parent().find('input[id$=' + txtmonths +']').first().val('foo');
    【解决方案3】:
    1. 首先获取元素 ID
    2. 然后通过连接 ID 选择器将该 ID 与 Jquery 选择器一起使用

      var textmonth = $(this).parent().find('input[id$=txtmonths]').attr("id");
      
      $('#'+ textmonth).val('your value');
      

    【讨论】:

    • 您选择 id 只是为了选择元素...对我来说没有多大意义。你已经准备好了元素!
    • @gdoron 正如OP所说,他需要一个变量/对象。这样他就可以使用它。而是直接分配
    • 我不知道,它仍然没有意义。只存储你得到的元素,为什么你只保存 id 然后再次选择它?
    • 感谢您的帮助....我正在使用此变量在代码的不同部分设置控件的值
    • @gdoron 是的,我知道。但由于 OP 需要变量以供将来使用。但你的解决方案比我的更优雅:)
    【解决方案4】:

    你需要创建一个选择器并通过它获取元素:

    var textmonth = $('#'+$(this).parent().find('input[id$=txtmonths]').attr("id"));
    

    【讨论】:

    • 您选择 id 只是为了选择元素...对我来说没有太大意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2012-09-06
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多