Skip to main content

closest获取值的问题

妈个比的

closest在ie里面不能获取forms的标签,ff里面可以。

最后老子在,forms 外面加了一组

把问题解决了。。。

做ecshop的时候

/**
* 点选可选属性或改变数量时修改商品价格的函数
*/

function changePrice(obj)
{
var tmpForm = $(obj).closest('form');
var goodsId = tmpForm.find('input[name=good_id]').val(); //看这种写法,可以获取input里面的值。不错哦。
var attr = getSelectedAttributes(tmpForm[0]);
var qty = tmpForm.find('input[name=number]').val();
Ajax.call('goods.php', 'act=price&id=' + goodsId + '&attr=' + attr + '&number=' + qty, changePriceResponse, 'GET', 'JSON');

function changePriceResponse(res)
{
if (res.err_msg.length > 0)
{
alert(res.err_msg);
document.forms['ECS_FORMBUY'].elements['number'].value = 1;
}
else
{
tmpForm.find('input[name=number]').val(res.qty);
tmpForm.find('.ECS_GOODS_AMOUNT').html(res.result);

}
}
}



var tmpForm = $(obj).closest('form');
var goodsId = tmpForm.find('input[name=good_id]').val(); //看这种写法,可以获取input里面的值。不错哦。
var attr = getSelectedAttributes(tmpForm[0]);
var qty = tmpForm.find('input[name=number]').val();

//——————————————–

<form>
<forms action="javascript:addToCart({$goods.goods_id})" method="post" name="ECS_FORMBUY" >
<input type="hidden" name="good_id" value="{$goods.goods_id}" />
商品编号:{$goods.goods_sn}

<br />
{$goods.name}
<br />
<!–本店售价–>
售价:¥<em>{$goods.shop_price_formated}</em>

<!– {* 开始循环所有可选属性 *} –>
<!– {foreach from=$goods.specification item=spec key=spec_key} –>
<div>
<div>{$spec.name}:</div>
<!– {* 判断属性是复选还是单选 *} –>
<!– {if $spec.attr_type eq 1} –>
<!– {if $cfg.goodsattr_style eq 1} –>
<div style="padding-left:22px;">
<!– {foreach from=$spec.values item=value key=key} –>
<a {if $key eq 0}class="cattsel"{/if} onclick="changeAtt(this)" href="javascript:;" name="{$value.id}" title="选择该属性增{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}元">{$value.label}<input style="display:none" type="radio" name="spec_{$spec_key}" value="{$value.id}" {if $key eq 0}checked{/if} /></a>
<!– {/foreach} –>
</div>

<!– {else} –>
{if $value.goods_num eq 0}(<font>缺货</font>){/if}

<!– {/if} –>
<!– {else} –>
<div style="padding-left:22px;">
<!– {foreach from=$spec.values item=value key=key} –>
<label for=">
<input type="checkbox" name="spec_{$spec_key}" value="{$value.id}" onclick="changePrice()"/>{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if}{$value.format_price|abs}元可得:{$value.label}< /label><br />
<!– {/foreach} –>
</div>

<!– {/if} –>
</div>
<!– {/foreach} –>
<!– {* 结束循环可选属性 *} –>

<div>
<div></div>
<div>
<input name="number" type="text" value="1" size="4" onblur="changePrice(this)" style="border:1px solid #ccc; "/>
<span> 小计:<font>{$goods.shop_price_formated}</font>元</span>
</div>
</div>
<a href="javascript:addToCart({$goods.goods_id})"><img src="images/bnt_cat.gif" /></a>
<div></div>
<a href="javascript:collect({$goods.goods_id})"><img src="images/bnt_colles.gif" /></a>

</forms>
</form>

//——————————————

贴下closest说明

closest会首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,一层一层往上,直到找到匹配选择器的元素。如果什么都没找到则返回一个空的jQuery对象。

closest和parents的主要区别是:

  1. 前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找;
  2. 前者逐级向上查找,直到发现匹配的 元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过滤;
  3. 前者返回0或1个元素,后者可能包 含0个,1个,或者多个元素。

closest对于处理事件委托非常有用。

参数

exprString, Array用以过滤元素的表达式。

jQuery 1.4开始,也可以传递一个字符串数组,用于查找多个元素。 context (可选)Element, jQuery作为待查找的 DOM 元素集、文档或 jQuery 对象。

示例描述: 展示如何使用clostest查找多个元素

HTML 代码:

<ul><li></li><li></li></ul>

jQuery 代码:

$("li:first").closest(["ul", "body"]);

结果:[ul, body]
描述:展示如何使用clostest来完成事件委托。

HTML 代码:

<ul> <li><b>Click me!</b></li> <li>You can also <b>Click me!</b></li> </ul>

jQuery 代码:

$(document).bind("click", function (e) { $(e.target).closest("li").toggleClass("hilight");});