Jquery .prop()返回对象而不是值

Jquery .prop()返回对象而不是值,jquery,Jquery,我会尽量使我的问题简单明了。所以我最近读了stackoverflow上的页面,决定开始使用prop而不是attr HTML 奇怪的是,当我提交表单时,它在控制台中打印的是 我的问题是: 为什么JQuery返回一个输入元素而不是表单action属性的值 为什么.prop可以获取method属性的值,而不能获取action属性的值 PS:我已经知道输入的属性名为action。方法属性不是布尔值。您需要为此使用attr。道具只能用于设置和重置布尔值,如禁用或选中 仅供参考,prop不是attr的替代品

我会尽量使我的问题简单明了。所以我最近读了stackoverflow上的页面,决定开始使用prop而不是attr

HTML

奇怪的是,当我提交表单时,它在控制台中打印的是

我的问题是:

为什么JQuery返回一个输入元素而不是表单action属性的值

为什么.prop可以获取method属性的值,而不能获取action属性的值

PS:我已经知道输入的属性名为action。

方法属性不是布尔值。您需要为此使用attr。道具只能用于设置和重置布尔值,如禁用或选中

仅供参考,prop不是attr的替代品。考虑这一点:

<input type="checkbox" name="chkBox" checked="checked" id="chkBox" />
使用相同的代码,我想应该可以:

$document.readyfunction{ $form.ajax.onsubmit,函数E{ e、 防止违约; var t=$this; var form=t.serialize; var方法=t.attr方法; var url=t.attraction; console.logurl; }; }; 显示
正如您可能已经怀疑的那样,混淆源于您在代码中使用了两次action这个词:

<form action="php/select.php" method="POST" class="ajax">
      ^^^^^^
<input type="hidden" name="action" value="SHOW_SERVERS"/>
                           ^^^^^^
由于jQuery1.6,t.attraction只获取HTML属性,而t.propaction获取JavaScript属性。因此:

t、 吸引力抓取动作=php/select.php这是向前的

t、 propaction获取一个属性。因为,我们得到了相应的

这是一个很好的例子,说明了为什么新逻辑有助于避免歧义

为什么JQuery返回的是输入元素而不是 表单动作属性

它与jQuery本身没有任何关系

它是HTML本身的规范。表单中的控件随表单一起提交,并且控件的名称成为表单的属性。详情如下:

这与表单标记上的属性不同

因此,即使不使用jQuery,如果要引用一个名为example的输入元素,也可以将其作为formname.example来引用

小提琴:

片段:

$form.ajax.onsubmit,function{ e、 防止违约; console.logthis.example; };
查看jQuery-1.11.3.js中的jQuery源代码第8239行,您可以看到,在多次检查调用给定元素字段之后,prop函数依赖于它


在您的示例中,元素是表单,您试图获取的字段是方法和操作。它为方法返回'post',因为方法是DOM对象形式的适当字段,所以form[method]按预期返回'post'。关于action,DOM对象的表单中没有action字段,因此调用form[action]实际上触发了一个底层机制,最终返回表单中第一个以action作为其name属性的元素:控制台中的输入。

但它返回form方法fine,只是形式不一样action@ahmadalbayati更新。@ahmadalbayati罪犯在这里:值得注意。道具和。@阿尔瓦罗冈萨雷斯我在之前的评论中说过。我正要把答案和你的一样更新。你先做到了。啊!!!伙计,我猜到了。但是没有击中。我正要在这里引用答案:。那么这些checked=checked和checked之间有什么区别呢?@Jai在什么上下文中?不管怎样,我们有HTML属性和JavaScript属性。在checked的情况下,HTML属性通过存在与否来工作,它的值是一个字符串,不相关,JavaScript属性是一个布尔值。我知道你首先得到了答案,但我更喜欢他的解释。无意冒犯^。^。谢谢你的回答!这不是速度竞赛,而是集体知识库-完美答案。解释得很好^^
$(document).ready(function(){
    $("form.ajax").on("submit",function(e){
        e.preventDefault();
        var t=$(this);
        var form=t.serialize();
        var method=t.attr("method");  // Change here
        var url=t.attr("action");     // Change here
        console.log(url);
    });
});
<input type="checkbox" name="chkBox" checked="checked" id="chkBox" />
$("#chkBox").prop("checked"); // true
$("#chkBox").attr("name");    // chkBox
<form action="php/select.php" method="POST" class="ajax">
      ^^^^^^
<input type="hidden" name="action" value="SHOW_SERVERS"/>
                           ^^^^^^