我正在使用Codigniter重做网站。我有以下控制器代码:
public function get_topics()
{
$topic = $this->input->post('input_data');
$topics = $this->firstcoast_model->get_topics_like($topic);
foreach ($topics as $val) {
echo "<pre id = \"pre_" . $val['id'] . "\">";
echo $val['formula'];
echo "<br />";
// generate a unique javascript file.
$f = "file_" . $val['id'] . ".js";
if (!file_exists($f));
{
$file = fopen($f,"w");
$js = "\$(\"#button_" . $val['id'] . "\").click(function(){\$(\"#pre_" . $val['id'] . "\").hide();});";
fwrite($file,$js);
fclose($file);
}
echo "<script src=\"file_" . $val['id'] . ".js\"></script>";
echo "<button id=\"button_" . $val['id'] . "\">Hide</button>";
echo "</pre>";
}
}
对函数进行AJAX调用以检索公式列表的基本思路。
javascript的目的是能够隐藏任何公式
隐藏&lt; pre
&gt; &LT; /pre
&GT;围绕它们的标签我生成的js文件(即file_1.js)看起来像:
$("#button_1").click(function(){$("#pre_1").hide();});
,按钮代码为:
<button id="button_1">Hide</button>
问题在于它不起作用。文件生成,但点击“隐藏” 按钮什么都不做。令人费解的是,完全相同的代码在原始网站上工作,我只是对生成相同代码的PHP文件进行AJAX调用。
有什么想法可以在这里发生什么?
编辑:
在我使用的旧网站上:
$query = "SELECT * FROM topics WHERE term LIKE '%" . $term . "%'";
$result = mysql_query($query);
while ($val = mysql_fetch_array($result))
{
echo "<pre id = \"pre_" . $val['id'] . "\">";
etc.
etc.
}
一切正常。如果我现在将while循环的结果放入数组然后对其进行foreach循环,则结果非常间歇。我想知道foreach循环是否是问题。
答案 0 :(得分:0)
我认为您可以在json响应中返回列表按钮
public function get_topics()
{
$topic = $this->input->post('input_data');
$topics = $this->firstcoast_model->get_topics_like($topic);
$response = array('buttons' => $topics);
header('Content-Type: application/json');
echo json_encode( $arr );
}
因此客户端可以解析要隐藏的按钮元素。
<script type="text/javascript">
$(document).ready(function(){
$('somEL').on('submit', function() { // This event fires when a somEl loaded
$.ajax({
url: 'url to getTopics() controller',
type : "POST",
data: 'input_data=' + $(this).val(), // change this based on your input name
dataType: 'json', // Choosing a JSON datatype
success: function(data)
{
for (var btn in data.buttons) {
$(btn).hide();
}
}
});
return false; // prevent page from refreshing
});
});
</script>