2

すべてのリンクをチェックして、リンク切れフィールドの背景色を変更しようとしています。これが私の機能です

function CheckLinks(){
$('#new_post_links_table tbody>tr').find("input").each(function() {
    UrlExists($(this).val(), function(status){
    if(status === 404){
       $(this).css('background-color','#FC0');
    }
}); });}

入力フィールドは次のようになります。

<table id="new_post_links_table">
...
<td><input type="text" name="mp3_link[]"/></td>
<td><input type="text" name="mp4_link[]"/></td>
</tr>
</tbody>
</table>

何らかの理由でcssが適用されていません。

注:一部を除いて、私のCheckLinks機能は機能し$(this).css...ます。(FireBug'ed)

注: 行は動的に追加されます

編集:ここに機能があります:

function UrlExists(url, cb){
    jQuery.ajax({
        url:      url,
        dataType: 'text',
        type:     'GET',
        complete:  function(xhr){
            if(typeof cb === 'function')
               cb.apply(this, [xhr.status]);
        }
    });
}
4

3 に答える 3

3

いくつかのことが間違っています。()の呼び出しに が含まれていませんでした。また、コールバック内$(this).valthis参照が意図した要素を参照していません。

function CheckLinks(){
  $('#new_post_links_table tbody > tr')
    .find("input")
    .each(function(index, element) {
      UrlExists($(this).val(), function(status){
        if(status === 404) $(element).css('background-color','#FC0');
      }); 
    });
}

これを行うと、 で問題が発生する可能性があることに注意してAccess-Control-Allow-Originください。

UrlExistsサーバー上のプロキシ スクリプトを介して実行するように関数を変更することができます。次のようなことができます。

$.getJSON('checklink.php', { location: url }, function ( data ) {
  callback.apply( null, data.status );
});

バックエンドで URL をテストし、JSON 経由で応答を送信します。

$response = array( 
  'location' => $location, 
  'status' => $status 
);
echo json_encode( $response );

このようにして、JavaScript はバックエンドと通信し、オリジン コントロールに問題はありません。

于 2012-05-02T18:40:04.703 に答える
2

私の感じでは、これはもはや入力を参照していません。入力を格納する変数を追加して、クロージャー内でアクセスできるようにする必要があります

var input = $(this);
UrlExists($(this).val(), function(status){
  if(status === 404){
     input.css('background-color','#FC0');
  }
});
于 2012-05-02T18:40:25.760 に答える
0

その関数は、動的に追加された行があることを知っていますか? 以前、私は同様の問題を抱えていました。問題は、何らかのコンテンツを含む新しい行が追加されたことを jQuery が認識していなかったことです。関数内の $(this) の下にあるものをコンソールに出力して、どのような結果が得られるか教えてください。

于 2012-05-02T18:41:27.397 に答える