我在这样的问题堆栈:
例子<td>
<span style="cursor:pointer;" onclick="$(this).parent().html('<input type=''text'' value=''asdasd'' onkeydown=''javascript:if(char_click(event)==13){send_ajax_settings($(this),'title' ,'3')}''>');">
<?=$result['settings_title']?>
</span>
</td>
看起来很好,但在浏览器中我得到"Uncaught SyntaxError: Unexpected identifier"在这一行(chrome列表):
<span style="cursor:pointer;" onclick="$(this).parent().html('input type=''text'' value=''asdasd'' onkeydown=''javascript:if(char_click(event)==13){send_ajax_settings($(this),'title' ,'3')}''>');">asdasd</span>
如果以前有人遇到过这样的麻烦,请帮帮我。我哪里错了?也许通过PHP echo会更好(我猜不是:))? 您没有转义'this'和'3'中的撇号。
正确的标记是:
<span style="cursor:pointer;" onclick="$(this).parent().html('input type=''text'' value=''asdasd'' onkeydown=''javascript:if(char_click(event)==13){send_ajax_settings($(this),''title'' ,''3'')}''>');">asdasd</span>
然而,这种绑定事件是一种非常糟糕的实践,并且会导致您刚刚遇到的那种错误。你应该这样做:
<span style="cursor:pointer;" class="spanClass" data-param1="title" data-param2="3">asdasd</span>
<span style="cursor:pointer;" class="spanClass" data-param1="title2" data-param2="5">asdasd</span>
... more spans generated dynamically
和这个:
$(document).ready(function(){
$(".spanClass").click(function(){
var param1 = $(this).attr("data-param1");
var param2 = $(this).attr("data-param2");
$('<input type="text" value="asdasd" />').keydown(function(event){
if(char_click(event)==13) {
send_ajax_settings($(this), param1 , param2));
}
}).appendTo($(this).parent());
});
});
所以,你可以把javascript和html分开,并且可以为服务器动态生成的任何数量的元素工作。
希望这对你有帮助。欢呼声
我认为你仍然缺少一些转义在send_ajax函数,试试这个:
<span style="cursor:pointer;" onclick="$(this).parent().html('input type=''text'' value=''asdasd'' onkeydown=''javascript:if(char_click(event)==13){send_ajax_settings($(this),''title'' ,''3'')}''>');">asdasd</span>
或者,为了使事情更易于管理,您可以使onclick调用一个执行给定代码的函数。这意味着您不必担心转义这么多,并且对您来说应该容易得多。