2

我正在学习使用 jquery 并正在制作一些测试页面以供练习。

对于此示例,我使用 jquery 将函数“showAddToDb()”绑定到按钮。当按下该按钮时,jquery 应该将以下 html 表单代码附加到由 id“memberContent”标记的 div 中(我在这里省略了)。

 $(document).ready(function() {
        $('#addToDb').bind('click',showAddToDb);
 });
 function showAddToDb() {
        var form = $("<div></div>");
        var formName = "<div class=\"formRow\"><label for=\"name\">Name: </label><input class=\"nameInput\" type=\"text\" name=\"name\"/></div>";
        var formLocation = "<div class=\"formRow\"><label for=\"location\">Location: </label><input class=\"locationInput\" type=\"text\" name=\"location\"/></div>";
        var formDes = "<div class=\"formRow\"><label for=\"description\">Description: </label><textarea class=\"descriptionInput\" name=\"description\" rows=\"10\" maxlength=\"1000\"></textarea></div>";
        var formPrice = "<div class=\"formRow\"><label for=\"price\">Price: </label><input class=\"priceInput\" type=\"text\" name=\"price\"/></div>";
        var formSubmit = "<div class=\"formRow\"><button onclick=\"addToDb()\">Submit</button></div>";
        form.append(formName);
        form.append(formLocation);
        form.append(formDes);
        form.append(formPrice);
        form.append(formSubmit);
        $('#memberContent').append(form);
    }

上面的代码有效,但我努力让它工作,我的问题是它为什么有效。为了让它工作,我不得不将函数的第一行从更改var form = "<div></div>";var form = $("<div></div>");

我知道美元符号代表 jquery 调用,但我不确定为什么在这种特殊情况下我需要它。另外,我是否应该也将所有其他变量包装起来以$()进行附加?它按原样工作,但我在网上看到了一些例子,这些例子没有解释原因。

4

3 回答 3

1

如果你不将该字符串传递给 jQuery,那么它就是一个字符串。请注意,稍后您将使用“form”变量,就好像它是一个 jQuery 对象一样:

form.append(formName);

所以最好是一个!您还可以引入一个新变量:

var $form = $(form); // assuming "form" was a plain string

进而:

$form.append(formName);
// etc, with "$form" instead of "form"

有些人喜欢通过给以“$”开头的名称来标记保存 jQuery 对象的变量。这是个人喜好的问题。

您不必包装其他字符串,因为它们被直接移交给 jQuery API。该代码将知道如何处理它们。但是,如果您确实将它们包装为 jQuery 对象,那么这也将起作用,因为 jQuery 只会做正确的事情。

于 2013-07-14T14:15:55.570 回答
1

为了让它工作,我不得不将函数的第一行从更改var form = "<div></div>";var form = $("<div></div>");

因为您尝试append在第一个代码中使用字符串,所以这将不起作用,因为该函数需要一个 DOM 对象。当您使用它时,$("<div></div>");您会将字符串转换为 DOM 对象,从而使append()函数调用有效。如果您使用纯 javascript 将字符串转换为 DOM 对象,则需要该createElement()函数。

这是普通的 javascript

var form = document.creatElement('div') // works 

这是你已经知道的 jQuery

var form = $('<div></div>'); // works

这不适用于任何 DOM 对象函数

 var form = "<div></div>"; // won't work with .append()

前两个创建一个 DOM div 对象var form = "<div></div>";,这与创建一个 javascript 字符串不同。如果您想使用 DOM 对象函数,例如append(),您需要像前两个示例一样将您的 javascript 变量转换为 DOM 对象。

于 2013-07-14T14:50:32.027 回答
1

看起来你的问题已经被其他人回答了。但是由于您提到您正在学习使用 jQuery,.bind因此不推荐使用.on. 您可以使用单引号来包装您分配的字符串,这样您就不需要转义字符串中的双引号。

于 2013-07-14T16:06:31.567 回答