到目前为止,我在 javascript中做得不多.我最近开始玩jQuery并且遇到了关于如何在表单上执行 Edit in Place的教程. 如果你在函数中对容器div的id进行硬编码,那么生成的代码就可以完美地运行
如果你在函数中对容器div的id进行硬编码,那么生成的代码就可以完美地运行,但是我在将这个代码推广到传递给函数的id时遇到了问题.
代码如下所示:
$(document).ready(function() { setClickable($('#editInPlace')); }); function setClickable(target) { $(target).click ( function() { //Do some dom manipulation $('.buttonA').click(function() { saveChanges(this, false); }); $('.buttonB').click(function() { saveChanges(this, true); }); } ) .mouseover(function() { $(this).addClass("editable"); }) .mouseout(function() { $(this).removeClass("editable"); }); }; //end of function setClickable function saveChanges(obj, cancel) { //Handle the save changes code //Reset the div $(obj).parent().after('<div id="editInPlace">' + t + '</div>').remove(); //Call setClickable setClickable($('#editInPlace')); }
我遇到问题的部分是最后一次调用saveChanges函数中的setClickable.如果我硬编码$(‘#editInPlace’)的值,它可以正常工作.但是,如果我将功能签名更改为
function saveChanges(target, obj, cancel)
并从setClickable方法传入目标对象:
$('.buttonB').click(function() { saveChanges(target, this, true); });
调用
setClickable(target);
似乎不起作用,我无法弄清楚为什么.
更改:function setClickable(target) { $(target).click (
至:
function setClickable(target) { target.click (
您传入一个包装集(也称为jQuery对象),然后将其包装在另一个包装集中.以上修正了这一点.另一种方法是:
$(document).ready(function() { setClickable('editInPlace'); }); function setClickable(id) { $("#" + id).click (
你看到我得到了什么?