到目前为止,我在javascript中做得不多.我最近开始玩jQuery并且遇到了关于如何在表单上进行编辑的教程.
如果你在函数中对容器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'));
}
Run Code Online (Sandbox Code Playgroud)
我遇到问题的部分是setClickable对saveChanges函数内部的最后一次调用.如果我对其值进行硬编码$('#editInPlace'),则可以正常工作.但是,如果我将功能签名更改为
function saveChanges(target, obj, cancel)
Run Code Online (Sandbox Code Playgroud)
并从setClickable方法传入目标对象:
$('.buttonB').click(function() { saveChanges(target, this, true); });
Run Code Online (Sandbox Code Playgroud)
调用
setClickable(target);
Run Code Online (Sandbox Code Playgroud)
似乎不起作用,我无法弄清楚为什么.
更改:
function setClickable(target)
{
$(target).click
(
Run Code Online (Sandbox Code Playgroud)
至:
function setClickable(target)
{
target.click
(
Run Code Online (Sandbox Code Playgroud)
您传入一个包装集(也称为jQuery对象),然后将其包装在另一个包装集中.以上修复了这一点.另一种方法是:
$(document).ready(function() {
setClickable('editInPlace');
});
function setClickable(id)
{
$("#" + id).click
(
Run Code Online (Sandbox Code Playgroud)
你看到我得到了什么?
| 归档时间: |
|
| 查看次数: |
15912 次 |
| 最近记录: |