Why isn't my JavaScript working in JSFiddle?

前端 未结 7 1404
萌比男神i
萌比男神i 2020-11-21 05:11

I can\'t find out what is the problem with this JSFiddle.

HTML:


Jav

相关标签:
7条回答
  • 2020-11-21 05:15

    There is no problem with your code.Just choose the extension onLoad() from right side.

    0 讨论(0)
  • 2020-11-21 05:24

    The function is being defined inside a load handler and thus is in a different scope. As @ellisbben notes in the comments, you can fix this by explicitly defining it on the window object. Better, yet, change it to apply the handler to the object unobtrusively: http://jsfiddle.net/pUeue/

    $('input[type=button]').click( function() {
       alert("test");   
    });
    

    Note applying the handler this way, instead of inline, keeps your HTML clean. I'm using jQuery, but you could do it with or without a framework or using a different framework, if you like.

    0 讨论(0)
  • 2020-11-21 05:25

    If you do not specify the wrap setting it defaults to "onLoad". This results with all JavaScript being wrapped in a function run after result has been loaded. All variables are local to this function thus unavailable in the global scope.

    Change the wrapping setting to "no wrap" and it'll work:

    http://jsfiddle.net/zalun/Yazpj/1/

    I switched the framework to "No Library" as you don't use any.

    0 讨论(0)
  • 2020-11-21 05:25
    Select OnDomready
    

    HTML:

    <input id="dButton" type="button" value="test"/>
    

    JavaScript:

    addEventListener('load', init, false);
    
    function init()
    {
      oInput = document.getElementById('dButton');
      oInput.onclick = test;
    }
    
    function test(){
      alert("test");
    }
    
    0 讨论(0)
  • 2020-11-21 05:30

    There is another way, declare your function into a variable like this :

    test = function() {
      alert("test");
    }
    

    jsFiddle


    Details

    EDIT (based on the comments of @nnnnnn)

    @nnnnnn :

    why saying test = (without var) would fix it ?

    When you define a function like this :

    var test = function(){};
    

    The function is defined locally, but when you define your function without var :

    test = function(){};
    

    test is defined on the window object which is at the top level scope.

    why does this work?

    Like @zalun say :

    If you do not specify the wrap setting it defaults to "onLoad". This results with all JavaScript being wrapped in a function run after result has been loaded. All variables are local to this function thus unavailable in the global scope.

    But if you use this syntax :

    test = function(){};
    

    You have an access to the function test because it's defined globally


    References :

    • https://stackoverflow.com/a/338053/3083093
    • https://stackoverflow.com/a/5830423/3083093
    0 讨论(0)
  • 2020-11-21 05:34

    Change wrap setting in the Frameworks & Extensions panel, to "No wrap-in <body>"

    0 讨论(0)
提交回复
热议问题