Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery范围问题_Jquery_Scope - Fatal编程技术网

jquery范围问题

jquery范围问题,jquery,scope,Jquery,Scope,我对以下问题有异议: 我似乎无法在每个重复的项目中保留我选择的链接。 “这”一词正在消失。 Var event_id适用于每个元素,但是Var$something是未定义的? 这是为什么呢?理想情况下,我想做一个switch语句,但同样的问题是,似乎无法让它知道我单击了什么链接以及它周围的元素来执行操作 更新的完整功能: function rsvp (selector,function_url) { $(selector).livequery('click',function(){ va

我对以下问题有异议: 我似乎无法在每个重复的项目中保留我选择的链接。 “这”一词正在消失。 Var event_id适用于每个元素,但是Var$something是未定义的? 这是为什么呢?理想情况下,我想做一个switch语句,但同样的问题是,似乎无法让它知道我单击了什么链接以及它周围的元素来执行操作

更新的完整功能:

function rsvp (selector,function_url) {
$(selector).livequery('click',function(){

   var $select = $(selector).attr('rel');
   var $event_id= $(this).parents('ul.event-options').attr('rel');
        if ($select == "attending") {
        $(this).closest('span.rsvp-status').html("I'm Attending &ndash; <a href='javascript:;' class='remove' rel='remove'>Remove</a>");
        var $something = $(this).parents('ul.event-options').attr('rel');
        alert($something);
        }
        if ($select == "remove") {
        $(this).closest('span.rsvp-status').html("Not Attending &ndash; <a href='javascript:;' class='rsvp' rel='attending'>RSVP?</a>");
        }
        if ($select == "interested") {
        $(this).closest('li').addClass('interested');
        $(this).closest('li').removeClass('not-interested');
        $(this).closest('li').html("You're Interested");
        }

   $.ajax({
        type: "POST",
        url: "/events/set_member/"+function_url,
        data: "event_id="+$event_id,
        beforeSend:  function() {
        $("<span class='notice'>Updating...</span>").prependTo('body');
                },
        complete: function()
                {
                $('span.notice').fadeOut(500);

                }
        });



   });
}
rsvp ('a.rsvp','rsvp');
rsvp ('a.interests','interested');
rsvp ('a.remove','remove');
函数rsvp(选择器,函数url){
$(选择器).livequery('单击',函数()){
var$select=$(选择器).attr('rel');
var$event_id=$(this.parents('ul.event options').attr('rel');
如果($select==“出席”){
$(this).closest('span.rsvp status').html(“我正在参加&ndash;”);
var$something=$(this.parents('ul.event options').attr('rel');
警觉($something);
}
如果($select==“删除”){
$(this).closest('span.rsvp status').html(“未出席&ndash;”);
}
如果($select==“感兴趣”){
$(this).closest('li').addClass('interest');
$(this).closest('li').removeClass('not-interest');
$(this.closest('li').html(“您感兴趣”);
}
$.ajax({
类型:“POST”,
url:“/events/set\u member/”+函数\u url,
数据:“event_id=“+$event_id,
beforeSend:function(){
$(“更新…).prependTo('body');
},
完成:函数()
{
$('span.notice')。淡出(500);
}
});
});
}
rsvp('a.rsvp','rsvp');
rsvp(“a.利益集团”、“利益集团”);
rsvp('a.remove','remove');
HTML


查看html并确保在执行
.html
调用后ul.event-options是父项。它还将有助于实际提供html源代码,因为这是一个完全依赖于您的标记的问题

这不可能是范围问题,因为您没有超出外部范围和livequery内部范围。

  • <li class="rsvp">
       <span class="rsvp-status"> 
          Not Attending &ndash; 
          <a href="javascript:;" class="rsvp" rel="attending">RSVP?</a>
       </span>
    </li>
    
    不出席&ndash;

  • 单击的get链接位于“rsvp状态”范围内。因此,当您替换相关范围的innerHTML(使用jQuery的.html函数)时,它也将删除该链接。因此,在html调用之后,$(this)将不再指向元素。

    我能够解决这个问题,并且它可以工作

    function rsvpNew(selector,function_url) {
     $(selector).livequery('click',function(){
       var select = $(selector).attr('rel');
       var event_id = $(this).parents('ul.event-options').attr('rel');
       element = this;
    
       switch(select) {
            case "attending":
            $.ajax({
            type: "POST",
            url: "/events/set_member/"+function_url,
            data: "event_id="+event_id,
            beforeSend:  function() {
            $("<span class='notice'>Saving...</span>").prependTo('body');
                                    },
            complete: function() {
    
    
                            $('span.notice').fadeOut(500);
                            $(element).closest('span.rsvp-status').html("I'm Attending &ndash; <a href='javascript:;' class='remove' rel='remove'>Remove</a>");
                            }
    
    
            });
    
    
                     break;
    
    函数rsvpNew(选择器、函数_url){
    $(选择器).livequery('单击',函数()){
    var select=$(选择器).attr('rel');
    var event_id=$(this).parents('ul.event options').attr('rel');
    元素=此;
    开关(选择){
    “出席”个案:
    $.ajax({
    类型:“POST”,
    url:“/events/set\u member/”+函数\u url,
    数据:“事件id=”+事件id,
    beforeSend:function(){
    $(“保存…”)。prependTo('body');
    },
    完成:函数(){
    $('span.notice')。淡出(500);
    $(element).closest('span.rsvp status').html(“我正在参加&ndash;”);
    }
    });
    打破
    
    很有意义,那么为什么我将同一行放在ajax调用的完整部分呢?在这一行中似乎什么都不起作用。可能是因为'this'关键字没有指向元素。请尝试改用它:var$something=$(span.rsvp status)。parents('ul.event options')。attr('rel');这可能会做同样的事情。
    <li class="rsvp">
       <span class="rsvp-status"> 
          Not Attending &ndash; 
          <a href="javascript:;" class="rsvp" rel="attending">RSVP?</a>
       </span>
    </li>
    
    function rsvpNew(selector,function_url) {
     $(selector).livequery('click',function(){
       var select = $(selector).attr('rel');
       var event_id = $(this).parents('ul.event-options').attr('rel');
       element = this;
    
       switch(select) {
            case "attending":
            $.ajax({
            type: "POST",
            url: "/events/set_member/"+function_url,
            data: "event_id="+event_id,
            beforeSend:  function() {
            $("<span class='notice'>Saving...</span>").prependTo('body');
                                    },
            complete: function() {
    
    
                            $('span.notice').fadeOut(500);
                            $(element).closest('span.rsvp-status').html("I'm Attending &ndash; <a href='javascript:;' class='remove' rel='remove'>Remove</a>");
                            }
    
    
            });
    
    
                     break;