我正在创建一个链接共享,该链接共享在特定文本区域的bind()事件(我粘贴链接的地方)上,它会执行带有预览的$.post
ajax回调(如果是YouTube或Vimeo链接)。基本上,每次检测到链接并获得预览时,我都会删除文本区域中的链接。
这是执行回调的函数:
$('#writer').bind('change keypress keyup keydown',function() {
var value_= $('#writer').val();
$('#thumb-temp').hide();
$.post( 'checklink.php?', { string : value_ },
function(response) {
$('.writer').prepend(response);
$('#thumb-temp').show();
}).fail(function() { alert( "error" ) })
});
和页面检查链接.php应该删除链接
<?
$link = $_POST['string'];
$reg_exUrl = "/(http|https|ftp|ftps)':'/'/[a-zA-Z0-9'-'.]+'.[a-zA-Z]{2,3}('/'S*)?/";
preg_match($reg_exUrl, $link, $url);
$link = $url[0];
?>
<script>clearTextarea('<? echo $link ?>')</script>
最后是 clearTextarea() 函数
function clearTextarea(url) {
var _textarea = $('#writer');
var _curVal = _textarea.val();
var _curUrl = url;
var _regex = new RegExp( _curUrl , 'g' );
var _newVal = _curVal.replace( _regex , '' );
_textarea.val( _newVal );
}
现在,显然,这应该有效,但没有任何反应,有什么想法吗?我不明白我错在哪里:(
我不确定你是否可以以这种方式运行javascript(从PHP回显)。我会直接从 $.post 调用它。
首先,我建议你不要发送这么多次 ajax。正则表达式基本上也是你可以在JS中做的事情。因此,与其发送 ajax - 请检查 JS 代码中的链接。其次,如果要更改文本区域的值,则应使用html()
而不是val()
。
顺序应该是,
<script type="text/javascript">
function clearTextarea(url) {
var _textarea = $('#writer');
var _curVal = _textarea.val();
var _curUrl = url;
var _regex = new RegExp( _curUrl , 'g' );
var _newVal = _curVal.replace( _regex , '' );
_textarea.val( url );
}
</script>
HTML 中的文本区域:
<textarea id="writer"></textarea>
PHP代码
<?php
$link = $_POST['string'];
$reg_exUrl = "/(http|https|ftp|ftps)':'/'/[a-zA-Z0-9'-'.]+'.[a-zA-Z]{2,3}('/'S*)?/";
preg_match($reg_exUrl, $link, $url);
$link = $url[0];
?>
调用 clearTextarea 函数();
<script>clearTextarea('<?php echo $link ?>');</script>
我用这种方式解决了
function clearTextarea() {
var _textarea = $('#writer');
var _curVal = _textarea.val();
var _curUrl = _curVal.match(/(http|https|ftp|ftps)':'/'/[a-zA-Z0-9'-'.]+'.[a-zA-Z]{2,3}('/'S*)?/gi);
var _newVal = _curVal.replace( _curUrl , '' );
_textarea.val(_newVal);
}
并在 ajax complete 上调用 clearTextarea()。就是这样;D