代码之家  ›  专栏  ›  技术社区  ›  ev vk

<function>未在htmlButtoneElement.onclick中定义

  •  0
  • ev vk  · 技术社区  · 6 年前

    很好的一天,

    我有一个按钮

    <button id="4" onclick="UpdateStatus(this.id)" class="btn btn-default" type="button">update</button>
    

       <script>
        $(document).ready(function () {            
    
            function UpdateStatus(Id) {                
                $.ajax({
                    type: "Post",//or POST
                    url: '/myController/UpdateSomething?Id=' + Id,
                    //  (or whatever your url is)
                    data: { data1: var1 },               
                    success: function (responsedata) {
                        // process on data
                        alert("got response as " + "'" + responsedata + "'");
                    }
                });
            }
        }
    </script>
    

    我的问题是我的观点有一个错误:

    UpdateStatus is not defined at HTMLButtonElement.onclick
    

    我做错什么了?谢谢

    更新

    当我试图运行此代码时

      @section scripts
      {   
       <script>
        $(document).ready(function () {
        //Carga datos del curso
        console.log("asdf");   
    });</script>}
    

    3 回复  |  直到 6 年前
        1
  •  2
  •   Fenrir    5 年前
    <script>
        function F(user_id) {
        var user_id = user_id;
        $.ajax({
            type:"GET",
            url:"http://127.0.0.1:8000/preference",
            data: {'user_id':user_id},
            async: false,
            success: function (result) {
                console.log(result)
            }
        });
    
    }
    </script>
    

    第一行自动不显示。它是脚本的type和src属性。我使用了“text/javascript”和“ http://code.jquery.com/jquery-latest.js ". 这个问题我找到了两个答案。一个和上面一样。把剧本分成两部分。第二个是将函数移到按钮标记下。

        2
  •  2
  •   Shyju    6 年前

    问题是,您在 document.ready jQuery的事件。解析和呈现按钮标记时,未定义JavaScript方法,因此您将得到错误。

    ready 方法在文档准备好之后执行(HTML的解析和呈现已经完成,可以安全地访问DOM)。至此,HTML已经呈现出来了。

    在它之外定义它。

    <script>
    
    function UpdateStatus(Id) {
       alert('UpdateStatus called');                
    }
    $(function () {
    
    });
    
    </script>
    

    另一种选择是 unobutrusive JavaScript

    <button id="4" class="btn btn-default" type="button">update</button>
    

    连接点击事件

    $(function () {
        $("#4").click(function (e) {
            e.preventDefault();
            alert('User clicked');
        });
    });
    
        3
  •  2
  •   Tetsuya Yamamoto    6 年前

    UpdateStatus 在范围内定义 document.ready() 功能。你可以申报 更新状态 作为外部变量 块并在其中声明函数:

    var UpdateStatus;
    
    $(document).ready(function () {
        UpdateStatus = function () {
            var buttonId = $('#4').attr('id');
    
            $.ajax({
                type: "POST",
                url: '/myController/UpdateSomething',
                data: { Id: buttonId, ... }, // setting parameters            
                success: function (responsedata) {
                    // process on data
                    alert("got response as '" + responsedata + "'");
                }
            });
        }
    });
    

    此外,基于标准事件注册模型和 separation of concerns

    $(document).ready(function () {
        $('#4').click(function() {
            var buttonId = $(this).attr('id');
    
            $.ajax({
                type: "POST",
                url: '/myController/UpdateSomething',
                data: { Id: buttonId, ... }, // setting parameters            
                success: function (responsedata) {
                    // process on data
                    alert("got response as '" + responsedata + "'");
                }
            });
        });
    });
    

    因为您使用的是AJAX POST,所以不需要在URL中使用查询字符串参数 url: '/myController/UpdateSomething?Id=' + Id

    相关问题:

    Uncaught ReferenceError: (function) is not defined at HTMLButtonElement.onclick

    Why is inline event handler attributes a bad idea in modern semantic HTML?