允许onclick函数只执行一次

时间:2014-08-28 12:52:32

标签: jquery asp.net onclick

我有一个gridview,其中所有列都是文本框。我已经通过jquery在文本框上实现了一个onclick函数,这样当用户单击文本框时,会单击一个隐藏按钮,然后更新更新面板并重新加载页面。文本框也应该是可编辑的。我的问题是,每次单击要编辑的文本框并重新加载页面时,都会触发 onclick 功能。怎么预防呢?

这是我的文本框代码:

注意:这只是一个文本框的代码。所有文本框都使用相同的Onclick功能

<asp:TextBox ID="txtLoginName" Onclick='<%# "timepass(" + Eval("userid") + ");" %>'
 Text='<%# Eval("LoginName")%>' runat="server"></asp:TextBox> 

这是触发函数背后的代码的jquery代码

<script type="text/javascript">
        function timepass(pass) {
            $("#btnHidden").trigger("click");
        }
    </script>

我想在gridview中使用隐藏列,每次单击文本框时其值都会更改,但由于行中有许多文本框,因此它变得越来越复杂,因此看起来不太可行。任何人都可以提出更好的选择吗?

1 个答案:

答案 0 :(得分:0)

为避免页面刷新,您只需使用Ajax调用即可。

function ajaxCall(passedId){
    $.post('url', { id: ajaxCall}, 
        function(returnedData){
            console.log(returnedData);
            //update grid view with complex javascript
        });
    }

然后您可以简单地使用Saeb绑定代码的修改版本

  $("yourselector").click(function(event) {
    var eventId = event.target.id;
    ajaxCall(eventId);
    $("#" + eventId).unbind( "click", handler );;
});

这会绑定到所有文本框,但会取消绑定特定文本框。此外,根据您使用的gridview类型,某些第三方网格like jQuery Grid允许您将JSON对象绑定到它们。

将其绑定到jQuery Grid的示例

$.post('url', { id: "value" },
    function (returnedData) {
        console.log(returnedData);
        var source =
        {
            datatype: "json",
            datafields: [
                { name: 'CompanyName' },
                { name: 'ContactName' },
                { name: 'ContactTitle' },
                { name: 'Address' },
                { name: 'City' },
                { name: 'Country' }
            ],
            localdata: data
        };
        var dataAdapter = new $.jqx.dataAdapter(returnedData);
        $("#jqxgrid").jqxGrid(
        {
            source: dataAdapter,
            columns: 
            [
                { text: 'Company Name', datafield: 'CompanyName', width: 250 },
                { text: 'Contact Name', datafield: 'ContactName', width: 150 },
                { text: 'Contact Title', datafield: 'ContactTitle', width: 180 },
                { text: 'City', datafield: 'City', width: 120 },
                { text: 'Postal Code', datafield: 'PostalCode', width: 90 },
                { text: 'Country', datafield: 'Country', width: 100 }
            ]
        });
    });