这个问题困扰了好几天了:
我通过ajaxLink打开一段内容,这段内容中,还要嵌入一段ajaxLink的链接,可是,第二层的ajaxLink始终不生效,我看了生成后的网页代码,
<SCRIPT type="text/javascript">
/<![CDATA[/
jQuery(document).ready(function() {
…
);/]]>/</SCRIPT>
这里只有最开始的那个链接。 而且这段javascript不在我事前定义好的div中,所以我通过replace或者update的方式都不能把这段代码更新。
我应该怎么办呢???
qiang
(Qiang Xue)
2
这个是个很麻烦的问题。目前整个js界都没有很好的解决办法。
解决的一个方法是不要用CHtml::ajaxLink,而是自己写:在click link后调用$.getScript(), 从服务器端取回执行一段JS代码。这段JS代码需要显示你希望更新的内容,包括新的ajax link。
我把这段代码
<SCRIPT type="text/javascript">
/<![CDATA[/
jQuery(document).ready(function() {
…
);/]]>/</SCRIPT>
在新内容中自己硬写进去了,然后把相关的参数更改,结果实现了。
强,不知道这样是否可靠呢?
我写了一个类:
class ECHtml extends CHtml
{
static public function my_ajaxLink($text, $url, $ajaxOptions=array(), $htmlOptions=array())
{
$url_text=array_shift($url);
$ajaxOptions['url']=Yii::app()->createUrl($url_text,$url);
$ajax=CHtml::ajax($ajaxOptions);
$id='id'.time();
if(!empty($htmlOptions))
{
$keys=array_keys($htmlOptions);
foreach($keys as $key)
{
if(strtolower($key)=='id')
{
$id=$htmlOptions[$key];
$href=CHtml::link($text, '#' ,$htmlOptions);
$script='<SCRIPT type="text/javascript">/*<![CDATA[*/jQuery(document).ready(function(){jQuery('#'.$id.'').click(function(){'.$ajax.'return false;});});/*]]>*/</SCRIPT>';
return $href.$script;
}
}
}
$htmlOptions['id']=$id;
$href=CHtml::link($text, '#' ,$htmlOptions);
$script='<SCRIPT type="text/javascript">/*<![CDATA[*/jQuery(document).ready(function(){jQuery('#'.$id.'').click(function(){'.$ajax.'return false;});});/*]]>*/</SCRIPT>';
return $href.$script;
}
}
这样问题就基本解决了!
可是,既然这样能解决问题,为什么Yii不这样做呢? 一定有什么原因吧?
qiang
(Qiang Xue)
6
你这样做只是解决了ajaxLink的问题。这个js问题的形成条件是:ajax response里有和当前页面里同样id的一个元素并且该元素可以触发ajax。所以,其它button或widget都有可能出现类似问题的。
强,你的话我有点没有太理解(我刚开始接触PHP)
我是这样想的,既然ajaxLink可以这样解决,那么ajaxButton也可以,总之就是那段script自己写进去就可以,使用这些的前提是 用户一定要保证 当前页面有相同ID的元素呀!
qiang
(Qiang Xue)
8