10

html()が起動された後にイベントを起動する方法はありますか?そのような:

$.post("ajax.php", {data :data}, function(data){
   $("#countries").html(data, function(){
      alert("test");
   });
});

これは機能していません。

編集:私は呼び出しから来る情報でいくつかのこと(別の呼び出し)をしたいのでこれを求めています...私は例を単純化したかった...私はプログラマーが常に理由を知りたいと思うと思います...

これが更新された例です

 $.post("ajax.php", {data :data}, function(data){
   $("#countries").html(data, function(){
        var id = $("#countries option:selected").attr("id");
        getRegions(id);
   });
});
4

5 に答える 5

22

はい、できます...

// create a reference to the old `.html()` function
var htmlOriginal = $.fn.html;

// redefine the `.html()` function to accept a callback
$.fn.html = function(html,callback){
  // run the old `.html()` function with the first parameter
  var ret = htmlOriginal.apply(this, arguments);
  // run the callback (if it is defined)
  if(typeof callback == "function"){
    callback();
  }
  // make sure chaining is not broken
  return ret;
}

// test it all works as expected (including chaining)
$("#mything").html("<div>My Thing</div>",function(){
  console.log("Just did my thing");
}).css({color: 'red'})

ただし、他の人が言うように、同期は不要である.html()ため、コールバックではなくコードをそれに続くだけでかまいません。

デモ: http://jsfiddle.net/billymoon/a49P4/

于 2012-08-06T10:43:20.613 に答える
2

html()は同期操作であり、イベントではないため、コールバックを論理的に受け入れません。

その後にコードを配置するだけです。

$('container').html(data);
alert('test');
于 2012-08-06T10:28:59.220 に答える
2

この構文も興味深いかもしれません:

$(selector).html(function(index,oldHTML){
    alert("test");
    return data;
});
于 2012-08-06T10:29:29.227 に答える
1

html応答にjavascriptコードを含めることができます。インラインの例:

  $("#content").html("hello\<script>\alert('hello');\</script\>");​

divを更新し、コードも実行します。

于 2012-08-06T10:32:01.493 に答える
0

いいえ、しかしこれができなかった理由はありません。

$.post("ajax.php", {data :data}, function(data){
   $("#countries").html(data);
   var id = $("#countries option:selected").attr("id");
   getRegions(id);
});
于 2012-08-06T10:28:42.030 に答える