1

チェックボックスが常に偽の状態を返すことについて話しているいくつかの記事を読みましたが、私自身の問題については何も見つかりませんでした。

だから、ここにスクリプトがあります:

<script type="text/javascript">
    function update_contact(id, name) {
        alert("idCont : " + id + "\n nameCKB : " + name + "\n state : "
                + $(this).attr('checked'));
        var a = location.pathname.substring(1).split('/')
        $.ajax({
            url : '@Url.Action("update_contact")',
            type : 'POST',
            data : {
                name : name,
                isChecked : $(this).is(':checked'),
                idOpp : a[2],
                idCont : id
            },
            success : function(result) {
            }
        });
    };
</script>

そして、これがチェックボックスのコードです:

@If mail = False Then
    @<input type="checkbox" name="mailed" id="mailed" class="mailed" onclick="update_contact(@item.idContact.toString() , 'mailed')" />
Else
    @<input type="checkbox" name="mailed" id="mailed" class="mailed" onclick="update_contact(@item.idContact.toString() , 'mailed')" checked="checked" />
End If

そして、これがサーバーによって生成されたコードです:

<input name="mailed" id="mailed" class="mailed" onclick="update_contact(1 , 'mailed')" type="checkbox">

最初は、Htmlヘルパーを使用しました。それはそのようなsmthを返していました:

<input id="mailed" name="mailed" onclick="update_contact(1 ,'mailed')" value="true" type="checkbox">
<input name="mailed" value="false" type="hidden">

私はそれが常に偽の状態を返していたのは2番目の入力によるものでしたが。

4

3 に答える 3

1

これを試してみてください(ここでフィドルを操作しています:http://jsfiddle.net/Ac3kd/):

<script type="text/javascript">
    function update_contact(id, name) {
        var source = $('#'+name);
        alert("idCont : " + id + "\n nameCKB : " + name + "\n state : " + source.attr('checked'));
        var a = location.pathname.substring(1).split('/')
        $.ajax({
            url: '@Url.Action("update_contact")',
            type: 'POST',
            data: { 
                    name: name, 
                    isChecked: source.is(':checked'), 
                    idOpp: a[2], 
                    idCont: id
            },
            success: function (result) {}
        });
    };
</script>
于 2012-04-04T09:42:29.157 に答える
1

問題はthis、あなたが思っていることではない可能性があります。クリックしたチェックボックスへの参照を関数に明示的に渡してみてください。

@If mail = False Then
      @<input type="checkbox" name="mailed" id="mailed" class="mailed" onclick="update_contact(@item.idContact.toString() , 'mailed', this)" />
Else
      @<input type="checkbox" name="mailed" id="mailed" class="mailed" onclick="update_contact(@item.idContact.toString() , 'mailed', this)" checked="checked" />
End If

その後:

    function update_contact(id, name, cb) {
        alert("idCont: " + id + "\n nameCKB: " + name + "\n state: " + cb.checked);
        // you could say $(cb).attr("checked"), but cb.checked is more efficient
        // and easier to read
        var a = location.pathname.substring(1).split('/')
        $.ajax({
            url: '@Url.Action("update_contact")',
            type: 'POST',
            data: { 
                    name: name, 
                    isChecked: cb.checked, 
                    idOpp: a[2], 
                    idCont: id
            },
            success: function (result) {}
        });
    };

または、jQueryを使用してクリックハンドラーを割り当てると、this正しく設定されます。属性にを入れて@item.idContact.toString()、ハンドラーで使用してアクセスできます。valuethis.value

@If mail = False Then
      @<input type="checkbox" name="mailed" id="mailed" class="mailed" value="@item.idContact.toString()" />
Else
      @<input type="checkbox" name="mailed" id="mailed" class="mailed" value="@item.idContact.toString()" checked="checked" />
End If

その後:

 $(document).ready(function() {
    $("#mailed").click(function() {
        alert("idCont: " + this.value + "\n nameCKB: " + this.name + "\n state: " + this.checked);
        // you could say $(this).attr("checked"), but this.checked is more efficient
        // and easier to read
        var a = location.pathname.substring(1).split('/')
        $.ajax({
            url: '@Url.Action("update_contact")',
            type: 'POST',
            data: { 
                    name: this.name, 
                    isChecked: this.checked, 
                    idOpp: a[2], 
                    idCont: this.value
            },
            success: function (result) {}
        });
    });
});

(注:VB /かみそりの構文は実際にはわかりません。推測しているだけです。)

于 2012-04-04T09:49:25.273 に答える
1

Mamooは正しいです:$。ajaxはjQueryオブジェクトであるため$(this)、update_contact関数を呼び出した要素を指しません。mamooのように2つの変数(sourceans )を作成する代わりに、ビットの直前に作成します。avar data$.ajax

function update_contact(id,name)
{
    var data = {name: name, 
                isChecked: $(this).is(':checked'), 
                idOpp: location.pathname.substring(1).split('/')[2], 
                idCont: id};
    $.ajax({
            url: '@Url.Action("update_contact")',
            type: 'POST',
            data: data,
            success: function (result) {}
        });
}

編集

$(this)名前とIDのパラメーターを渡す代わりに、機能するために-これは、チェックボックス要素がどこかで選択されていることを意味し、次のような方法で関数を呼び出しています。

update_contact($(elem).attr('id'),$(elem).attr('name'));

より短く、よりクリーンで、より強力なものを使用してください。

update_contact.call($(elem));

または、インラインonclick="update_contact()"をに変更しonclick="update_contact.call(this)"ます。$記号や角かっこなしでこれだけ...

于 2012-04-04T09:54:05.107 に答える