0

在我寫了一個代碼...IE7/8重複Ajax請求

function change_regione(handle) { 
// Hiding selects that we don't need 
jQuery("select#comune").hide(); 
jQuery("select#quartiere").hide(); 
if(jQuery("#regione").val() == '') { 
    jQuery("select#provincia").parent().hide(); 
    return 
} 

jQuery.ajax({ 
    url : WEBSITE_PATH + 'loadProvince.php', 
    type : 'GET', 
    dataType: 'json', 
    data : { 
     search_value : jQuery("#regione option:selected").attr("rel") 
    }, 
    success : function(result) { 
     var provinceOptions = "<option value=\"\">Tutte le province</option>"; 
     jQuery.each(result,function(i,el){ 
      provinceOptions += '<option value="'+ el.url +'" rel="'+ el.id +'">' + el.value.replace("~","") + '</option>'; 
     }); 
     jQuery("select#provincia").parent().show(); 
     jQuery("select#provincia").html(provinceOptions).show(); 
    }, 
error : function(request, status, error) { 
} 
}); 

}

IE7/8啓動AJAX請求兩次了選擇的onchange()事件。

<select id="regione" name="regione" class="srhbox" onchange="change_regione(this)"> 
... 
</select> 

Firefox,Safari,Chrome,表現正確。

發生了什麼事?你見過這種行爲嗎?

+0

請求被證明根據Apache日誌將推出兩次...... – Napolux 2011-12-14 15:16:32

+1

我還沒有看到過,但我也從來沒有使用`平變化=「...」`。如果你使用jQuery來綁定使用`.bind``.on`或`.change`的事件,我不認爲你會看到這個問題。 – 2011-12-14 15:17:36

回答

1

嗯,我不知道你爲什麼在jQuery中使用內聯js。

只是使用jQuery的.change()事件:

$('#regione').change(function() { 
    // Hiding selects that we don't need 
    jQuery("select#comune").hide(); 
    jQuery("select#quartiere").hide(); 
    if (this.value == '') { 
     jQuery("select#provincia").parent().hide(); 
     return; 
    } 

    jQuery.ajax({ 
     url: WEBSITE_PATH + 'loadProvince.php', 
     type: 'GET', 
     dataType: 'json', 
     data: { 
      search_value: jQuery("option:selected", this).attr("rel") 
     }, 
     success: function (result) { 
      var provinceOptions = "<option value=\"\">Tutte le province</option>"; 
      jQuery.each(result, function (i, el) { 
       provinceOptions += '<option value="' + el.url + '" rel="' + el.id + '">' + el.value.replace("~", "") + '</option>'; 
      }); 
      jQuery("select#provincia").parent().show(); 
      jQuery("select#provincia").html(provinceOptions).show(); 
     }, 
     error: function (request, status, error) {} 
    }); 
}); 
0

我不知道爲什麼它的行爲是這樣,但是我有一個變通爲您服務。嘗試這個。

var requestInProgress = false; // Variable to check if the request is in progress 
function change_regione(handle) { 

    if(requestInProgress){ 
    return; 
    } 

    requestInProgress = true; 
    // Hiding selects that we don't need 
    jQuery("select#comune").hide(); 
    jQuery("select#quartiere").hide(); 
    if(jQuery("#regione").val() == '') { 
    jQuery("select#provincia").parent().hide(); 
    return 
    } 

    jQuery.ajax({ 
     url : WEBSITE_PATH + 'loadProvince.php', 
     type : 'GET', 
     dataType: 'json', 
     data : { 
      search_value : jQuery("#regione option:selected").attr("rel") 
     }, 
     success : function(result) { 
      var provinceOptions = "<option value=\"\">Tutte le province</option>"; 
      jQuery.each(result,function(i,el){ 
       provinceOptions += '<option value="'+ el.url +'" rel="'+ el.id +'">' + el.value.replace("~","") + '</option>'; 
      }); 
      jQuery("select#provincia").parent().show(); 
      jQuery("select#provincia").html(provinceOptions).show(); 
      requestInProgress = false; 
     }, 
     error : function(request, status, error) { 
     } 
    }); 
}