Javascript 我如何在单击按钮时调用JQuery函数?

Javascript 我如何在单击按钮时调用JQuery函数?,javascript,jquery,function,Javascript,Jquery,Function,我有一个JQuery函数,通过使用JSON文件获取和显示一页图像。我希望在单击按钮时显示下一组图像,但这需要在请求url中添加一个短字符串,当我第一次运行脚本时,该字符串被找到并存储在一个var中。我需要再次调用这个JQuery函数,并将字符串var传递给它(下面代码中的lastId)。总的来说,我对JavaScript一窍不通,不知道该怎么做 以下是代码的完整版本: $(function runthis(un){ var lastId; un = typeof un !== 'un

我有一个JQuery函数,通过使用JSON文件获取和显示一页图像。我希望在单击按钮时显示下一组图像,但这需要在请求url中添加一个短字符串,当我第一次运行脚本时,该字符串被找到并存储在一个var中。我需要再次调用这个JQuery函数,并将字符串var传递给它(下面代码中的lastId)。总的来说,我对JavaScript一窍不通,不知道该怎么做

以下是代码的完整版本:

$(function runthis(un){
   var lastId;
   un = typeof un !== 'undefined' ? un : "";
  $('#domainform').on('submit', function(event){
    event.preventDefault();
    $('#content').html('<center><img src="img/loader.gif" alt="loading..."></center>');

    //var lastId;
    var domain = $('#s').val();
    var newdomain = domain.replace(/\//g, ''); // remove all slashes
    var requrl = "http://www.reddit.com/r/";
    var getmore;

    getmore = "?after=t3_"+un; 

    var fullurlll = requrl + domain + ".json" + getmore;

    $.getJSON(fullurlll, function(json){
      var listing = json.data.children;
      var html = '<ul class="linklist">\n';

      for(var i=0, l=listing.length; i<20; i++) {
        var obj = listing[i].data;

        var votes     = obj.score;
        var title     = obj.title;
        var subtime   = obj.created_utc;
        var thumb     = obj.thumbnail;
        var subrdt    = "/r/"+obj.subreddit;
        var redditurl = "http://www.reddit.com"+obj.permalink;
        var subrdturl = "http://www.reddit.com/r/"+obj.subreddit+"/";
        var exturl    = obj.url;
        var imgr      = exturl;
        var imgrlnk   = imgr.replace("target=%22_blank%22","");

        var length = 14;
        var myString = imgrlnk;
        var mycon = imgrlnk;
        var end = mycon.substring(0,14);
        myString.slice(-4);
        var test1 = myString.charAt(0);
        var test2 = myString.charAt(1);

        var timeago = timeSince(subtime);

        if(obj.thumbnail === 'default' || obj.thumbnail === 'nsfw' || obj.thumbnail === '')
          thumb = 'img/default-thumb.png';

        if(end == "http://i.imgur" ){  
          $("#MyEdit").html(exturl);
          html += '<li class="clearfix">\n';
          html += '<img src="'+imgrlnk+'" style="max-width:100%; max-height:750px;">\n';
          html += '</li>\n';
          html += '<div class="linkdetails"><h2><a href="'+imgrlnk+'" style="text-decoration: none; font-size:2em">'+title+'</a></h2>\n';
          /*html += '<p class="subrdt">posted to  <a href="'+subrdturl+'" target="_blank">'+subrdt+'</a> '+timeago+'</p>'; /*'+test1+test2+'*/
          html += '</div></li>\n';
        }

        if (listing && listing.length > 0) {
            lastId = listing[listing.length - 1].data.id;
        } else {
            lastId = undefined;
        }

      } // end for{} loop

      htmlOutput(html);

    }); // end getJSON()
  }); // end .on(submit) listener

  function htmlOutput(html) {
    html += '</ul>';

    $('#content').html(html);
  }   
});
$(函数runthis(un){
拉斯蒂德变种;
un=un的类型!=“未定义”?un:;
$('#domainform')。在('submit',函数(事件){
event.preventDefault();
$('#content').html('');
//拉斯蒂德变种;
变量域=$('#s').val();
var newdomain=domain.replace(//\//g',);//删除所有斜杠
var requrl=”http://www.reddit.com/r/";
var getmore;
getmore=“?after=t3_”+un;
var fullurll=requrl+domain+“.json”+getmore;
$.getJSON(fullUrll,函数(json){
var listing=json.data.children;
var html='
    \n'; for(var i=0,l=listing.length;i 0){ lastId=listing[listing.length-1].data.id; }否则{ lastId=未定义; } }//结束{}循环 htmlOutput(html); });//end getJSON() });//在(提交)侦听器上结束 函数htmlOutput(html){ html+='
'; $('#content').html(html); } });
您当前执行函数运行的方式永远不会为该函数留下句柄。这意味着它实际上只存在于document.ready(即$(function())的快捷方式)的上下文中

您要做的是保留对该函数的引用,以供以后使用

如果您希望能够将其直接放入
onclick='
中,则需要将函数放入全局

例如:

这声明了一个名为myFunction的函数,然后告诉jQuery在DocumentReady上执行它

“全局”通常被认为是相当顽皮的编辑。一个稍微好一点的选项是将单击指定给javascript中的按钮

例如:


这意味着函数myFunction只存在于文档的作用域中。就绪,不在全局作用域中(并且您根本不需要
onclick=''

在某些事件上添加侦听器,您可以使用
live('click',function(){})
例如:

<div id="my-button">some content</div>
<script type="text/javascript">
$('#my-button').live('click',function(){
//your code 
})
</script>
一些内容
$(“#我的按钮”).live('单击',函数()){
//你的代码
})

您想稍后执行runThis()吗?@Luke是的,对于按钮点击之类的操作。live()已经被弃用了一段时间。是的,但我仍然使用它,因为我的页面上有动态对象。如果我要传递变量,我会简单地将var myFunction=function(lastId){}放在这里并调用myFunction(lastId)?如果您想通过单击$(“#我的按钮id”)传递参数,那么就可以了;查看本文:
$(function(){ 
   var myFunction = function() { /*Stuff here*/}
   myFunction(); //call it here
   $('#my-button-id').click(myFunction);//attach a click event to the button
)
<div id="my-button">some content</div>
<script type="text/javascript">
$('#my-button').live('click',function(){
//your code 
})
</script>