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...部分除外。(火虫)

注意:行是动态添加的

编辑:这是功能:

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).val,并且您this在回调中的引用并未引用预期的元素。

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 回答